このガイドでは、1つのインスタンスのみを同時に実行できるWPFアプリケーションを構築する方法について説明します。 これは、Mutexesを使用して達成されます
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 サイトの他の関連記事を参照してください。