前言
今天,要分享一個小技巧,讓你的 WinForms 桌面應(yīng)用程序像明星一樣獨享舞臺 —— 確保它在同一時間只能運行一個實例!
這樣做有什么好處呢?
首先,它可以幫助用戶集中注意力,減少被多個窗口干擾的可能性。
其次,它能有效減少系統(tǒng)資源的使用,提高程序的穩(wěn)定性和響應(yīng)速度。
最重要的是,防止多個實例同時訪問和修改共享數(shù)據(jù),確保數(shù)據(jù)的一致性和完整性。
……
聽起來是不是很棒?
那么,如何實現(xiàn)這個功能呢?
接下來,跟我的步驟一起動手做一下吧!
Step By Step 步驟
1. 創(chuàng)建一個新的 WinForms 項目,命名為“WinOneDemo”
2. 編寫只允許一個程序?qū)嵗拇a
在 Program.cs
文件中編寫以下代碼,留意代碼中的注釋:
// 定義一個互斥體(Mutex),用于標(biāo)識應(yīng)用程序是否已經(jīng)在運行
privatestatic Mutex mutex = null;
/// <summary>
/// 初始化全局互斥體,確保只有一個應(yīng)用程序?qū)嵗\行
/// </summary>
private static void GlobalMutex()
{
bool newMutexCreated = false;
Process current = Process.GetCurrentProcess();
// 使用全局命名空間確??鐣捨ㄒ?/span>
string mutexName = "Global\\" + current.ProcessName;
try
{
// 嘗試創(chuàng)建一個名為 mutexName 的互斥體
mutex = new Mutex(false, mutexName, out newMutexCreated);
}
catch
{
// 如果創(chuàng)建互斥體失?。ɡ鐧?quán)限問題),則等待一段時間后退出
Console.WriteLine($"Failed to create mutex: {ex.Message}");
Thread.Sleep(1000);
Environment.Exit(1);
}
// 如果互斥體已經(jīng)被創(chuàng)建,說明已經(jīng)有實例在運行
if (!newMutexCreated)
{
// 彈出警告消息框
MessageBox.Show("程序已經(jīng)在運行中……","警告",MessageBoxButtons.OK);
Thread.Sleep(1000);
// 優(yōu)雅地退出新啟動的實例
Environment.Exit(1);
}
}
[STAThread]
static void Main()
{
// 調(diào)用方法,確保只有一個實例運行
GlobalMutex();
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
5. 運行和測試
現(xiàn)在,你可以編譯并生成 exe 程序。
找到 WinForms 的輸出目錄,雙擊打開 WinOneDemo.exe
,這時候,應(yīng)用程序?qū)淮蜷_。
如果你繼續(xù)雙擊打開 WinOneDemo.exe
,你將看到一個提示 "程序已經(jīng)在運行中……" 的警告消息框,如下圖所示:
總結(jié)
恭喜你!你已經(jīng)成功地讓你的 WinForms 應(yīng)用程序只能運行一個實例,是不是感覺特別簡單又有趣呢?
小技巧,大作用,希望它能讓你的應(yīng)用程序運行更加穩(wěn)定和友好。
該文章在 2025/1/13 10:50:15 編輯過