第一種方式:利用Mutex互斥量實現同時只有一個進程實例在運行
static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//控制當前程序已經打開(即啟動)
//方式1:利用Mutex互斥量實現同時只有一個進程實例在運行
//互斥鎖(Mutex)
//互斥鎖是一個互斥的同步對象,意味着同一時間有且僅有一個線程可以獲取它。
//互斥鎖可適用於一個共享資源每次只能被一個線程訪問的情況
bool flag = false;
System.Threading.Mutex hMutex = new System.Threading.Mutex(true, Application.ProductName, out flag);
bool b = hMutex.WaitOne(0, false);
/*上面的參數說明:
第一個參數【initiallyOwned】:true:指示調用線程是否應具有互斥體的初始所有權 (老實說沒理解透)
第二個參數【name】:程序唯一name,(當前操作系統中)判定重復運行的標志
第三個參數【createdNew】:返回值,如果檢測到已經啟動則返回(false)。
*/
if (flag)
{
//沒有啟動相同的程序
Application.Run(new MainForm());
}
else
{
MessageBox.Show("當前程序已在運行,請勿重復運行。");
Environment.Exit(1);//退出程序
}
}
}
