質問

「閉じた」とシステムトレイ(顧客要件)に最小化する小さなWPFアプリを書きました。ダブルクリックするとバックアップするか、右クリックが終了するコンテキストメニューを与えます。

ただし、アプリが最小化され、ユーザーが[すべてのプログラム] - > [アプリケーション]が新しいインスタンスを開始するようにナビゲートする場合。

ユーザーが新しいインスタンスを起動するのではなく、これを行う場合、実行中のインスタンスを最大化するためにアプリを取得するために(C#で)必要なことは何ですか?

ありがとう!

役に立ちましたか?

解決

これ 答え Jon SkeetからMutexを使用してそれを行うことについて話し合います

ミューテックスは行く方法です。プロセス名などを使用するよりも脆弱ではありません。

ただし、ミューテックスがゴミ収集されていないことを確認する必要があります。サービスの場合(完了まで実行される「メイン」メソッドを持つのではなく、イベント駆動型です)、これを行う最も賢明な方法は、おそらく静的変数に入れることです。

サービスが停止したときにミューテックスを処分するため、最終化などを待つ必要はありません。

マシュー・ブリンドリーは、同じ質問でこの例を挙げています 彼の答え

[STAThread]
static void Main() 
{
   using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
   {
      if(!mutex.WaitOne(0, false))
      {
         MessageBox.Show("Instance already running");
         return;
      }

      Application.Run(new Form1());
   }
}

他のアプリケーションを最大化するには、最大化するためにメッセージを送信する必要があります。この記事を参照してください メッセージ送信

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top