2011-07-04 132 views
0

我想爲我的應用程序設置持久狀態。讓我解釋。 啓動時間有點長(主要是由於許多數據庫請求到遠程服務器,需要5-10秒,甚至更多,因爲我的用戶通常有太多的應用程序運行...),我想設置一種隱藏&的方式在需要時顯示我的應用程序。WPF - 在任務管理器中顯示隱藏但活動的應用程序

我現在正在做的是隻減少應用程序時,用戶點擊紅十字會托盤。 (只有當用戶選擇文件 - >退出時,應用程序才真正退出)。

所有用戶推出其正在檢查安裝,那麼版本的在線版本的安裝程序,並在必要時啓動它之前更新的應用程序。

現在,我希望它首先檢查進程監視器(在任務管理器,進程選項卡中找到的進程監視器),並且如果進程已經在運行該應用程序,它將再次顯示該窗口。否則,如果沒有進程正在運行,我們可以處理經典檢查 - 更新 - 然後啓動步驟。 這將特別消除我經常遇到的很多愚蠢的客戶請求(「嘿,您的應用程序需要很長時間才能加載,所以我再次點擊它5次,並且它啓動了6個實例!!!!」:/)並因此保存我花了很多無用的時間,要求他們停止啓動同一個應用程序的50個實例,因爲它不會讓它變得更快...

所以我的主要問題是:如何在C#/ WPF中執行這樣的技巧? 現在,我的最小化過程很簡單(即使可能太簡單):我只隱藏窗口&任務欄條目。現在我不知道如何來顯示它從我的安裝程序

任何想法了?

+0

真是個好主意。我也會說你可以/應該有一個啓動畫面出現,並給用戶反饋,該應用程序正在加載,並在後臺線程上處理這些初始查詢。 –

+0

已經有一個啓動畫面,以完全清晰的方式顯示加載狀態。問題是我爲交易員工作,他們總是有至少20個應用程序在6個以上的屏幕上運行,我無法以「TopMost」方式保持閃屏,因爲它會干擾他們的工作,並且不檢查它是否啓動應用程序再次。我嘗試添加一個NotifyIcon來獲取信息,或者在TopMost中加載一個小的加載進度條,他們會繼續啓動它4到5次。不幸的是,現在該以另一種方式處理它:/ – Damascus

回答

3

你的客戶的要求永遠是愚蠢的 - 他們付你錢。

爲了使窗口前 - 創建全系統互斥鎖,並檢查其在應用程序啓動的存在。如果它在那裏 - 使用進程間通信機制將消息發送到其他實例以將其主窗口置於前面(窗口消息或命名管道 - 兩者均可)。這裏是an example(一定要檢查相關的答案)。

,任何方式,只要你能防止一次又一次重新推出應用表明splash screen。如果它在1-2秒內不出現(2太長),那就很糟糕。您的應用程序的響應速度會讓您覺得它的運行速度更快。

+0

感謝您的鏈接!我省略了它,因爲它看起來很完美,但我確實有一個啓動畫面。我會檢查一下 – Damascus

2

這是你要找的東西嗎?

foreach (var p in Process.GetProcesses()) 
{ 
    if (p.ProcessName.Contains("myProcess")) 
    { 
     //process is already running 
    } 
} 

或者,使用LINQ:

if (Process.GetProcesses().Where(p => p.ProcessName.Contains("myProcess")).Any()) 
{ 
    //process is already running 
} 

如果用戶抱怨啓動時間,也許考慮檢查,而不是啓動退出的版本。

+0

如果您同時啓動應用程序的兩個實例,那麼又會如何確定另一個正在運行並退出? – svick

+0

的確如此,但我相信這將是一個邊緣案例。儘管如此,你是對的。 – Peter

+1

如果我們不需要處理邊界情況,編程將很容易。 – svick

相關問題