2011-01-06 72 views
7

我寫了一個小WPF應用程序,當'關閉'最小化到系統托盤(客戶需求)。雙擊會彈出備份,或者右鍵單擊可以退出上下文菜單。最大化系統托盤中的應用程序?

但是,如果應用程序最小化,並且用戶導航到開始 - >所有程序 - >應用程序,它將啓動一個新的實例。

如果用戶這樣做而不是激發新實例,我需要做什麼才能讓應用程序最大化運行實例?

謝謝!

+2

查找Mutex對象和抓住一個活動窗口。在我面前沒有代碼,但這是你需要採取的方向。 - 我撒謊,嘗試[這篇文章的.net應用程序的單個實例](http://www.ai.uga.edu/mc/SingleInstance.html) – 2011-01-06 04:46:57

回答

7

answer從喬恩斯基特討論了使用互斥做到這一點

互斥是要走的路。這是很多 比使用進程名稱 等脆弱。

但是,您需要確保 互斥不被垃圾收集。在 情況下服務(這是事件 驅動,而不是具有運行到完成「主」 方法),這樣做的 最明智的辦法就是 可能把它在一個靜態變量 。

處置互斥時 停止,所以你不必等待 定稿或任何類似的服務。

馬修·布林德利給出了同樣的問題,這個例子his answer

[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()); 
    } 
} 

要最大化你需要給它發送信息,最大限度其他應用程序。看到這篇文章message sending

+0

完美,謝謝! – Nicros 2011-01-06 05:49:25

相關問題