我們在創建C# WinForm應用程序時,有時需要限制用戶在同一時間只允許啟動一個應用程序實例,例如安裝程序包、系統掃描工具等等。當應用程序的一個實例已經處於運行狀態時,如果用戶企圖再啟動一個實例,則給用戶一個提示並終止該實例。
這個其實很簡單!我們知道,WinForm應用程序都有一個程序運行時的入口點,這點與WebForm應用程序不同,后者需要在任意一個可訪問的Page中設置允許用戶訪問的權限,而WinForm應用程序只需要處理好程序的入口點就可以了。因此我們需要在Program class的Main函數中進行判斷和處理。代碼如下:
- [STAThread]
- static void Main()
- {
- bool createNew;
- using (System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out createNew))
- {
- if (createNew)
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
- }
- else
- {
- MessageBox.Show("Only one instance of this application is allowed!");
- }
- }
- }
主要使用了Sytem.Theading.Mutex對象,該對象用於解決多線程操作中的互斥問題,有關它的詳細介紹讀者可以參考MSDN。
http://msdn.microsoft.com/zh-cn/library/bwe34f1k(VS.80).aspx