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