ホームページ >バックエンド開発 >C++ >WPFアプリケーションの1つのインスタンスのみが一度に実行されるようにする方法は?

WPFアプリケーションの1つのインスタンスのみが一度に実行されるようにする方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2025-02-02 07:31:09413ブラウズ

How to Ensure Only One Instance of a WPF Application Runs at a Time?

WPFアプリケーションでの単一インスタンスの動作の実装

このガイドでは、1つのインスタンスのみを同時に実行できるWPFアプリケーションを構築する方法について説明します。 これは、Mutexesを使用して達成されます

mutexes

の理解

Mutex(相互除外)は、同期原始です。 これにより、単一のプロセスのみが、いつでも共有リソースにアクセスできることが保証されます。 WPFでは、Mutexesを活用して、複数のアプリケーションインスタンスが同時に実行されないようにします。

実装の詳細

名前付きmutexes:

を使用しています 優先メソッドには、アプリケーションのメインエントリポイント内で名前付きミューテックスを作成することが含まれます。

名前付きMutexesは、複数のプロセスとスレッドで同期を有効にします

<code class="language-csharp">static class Program
{
    static Mutex mutex = new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");
    // ...
}</code>
mutexの取得:

別のインスタンスが既に実行されているかどうかを判断するには、メソッドを使用します:

WaitOneオプション:既存のインスタンスの通知:

<code class="language-csharp">if (mutex.WaitOne(TimeSpan.Zero, true))
{
    // Mutex acquired; application can start
    Application.Run(new MainWindow());
    mutex.ReleaseMutex();
}
else
{
    // Mutex unavailable; another instance is active
    MessageBox.Show("An instance is already running.");
}</code>

ユーザーエクスペリエンスの強化については、新しい起動が試行されたときに実行中のインスタンスに通知できます。これは、を使用して行われます

PostMessageカスタムwin32メッセージの処理:

<code class="language-csharp">if (!mutex.WaitOne(TimeSpan.Zero, true))
{
    NativeMethods.PostMessage(
        (IntPtr)NativeMethods.HWND_BROADCAST,
        NativeMethods.WM_SHOWME,
        IntPtr.Zero,
        IntPtr.Zero);
}</code>
メインウィンドウで、カスタムメッセージを聞き、既存のウィンドウを前景に持ち込むために

をオーバーライドしてください: この包括的なアプローチにより、堅牢なシングルインスタンスWPFアプリケーションが保証され、複数のインスタンスが同時に実行されるのを防ぎます。 必要な定義を含めることを忘れないでください(簡潔にするためにここには示されていません)。

以上がWPFアプリケーションの1つのインスタンスのみが一度に実行されるようにする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。