C# 避免程式重複執行

在 C# 中,Mutex 是用來避免多個程式或執行緒同時訪問共享資源,Mutex 可以確保只有一個執行緒或處理程序存取。

我們可以很簡單的使用 Mutex 確保本程式只有被執行一次。啟動時使用相同的名稱建立 Mutex ,並檢查是否是新建立的,如果不是則代表程式已經被啟動了。最後在程式結束時記得釋放 Mutex :
    
const string mutexName = "Global\\_RUYUT_MUTEX";
var procMutex = new System.Threading.Mutex(true, mutexName, out var result);
if (!result)
{
    Console.WriteLine("程式已在執行中,不可重複執行");
    return;
}


// TODO: 其他程式碼


// 釋放
procMutex.ReleaseMutex();
    

要驗證 Mutex 可以下載 Sysinternals Suite,執行下面的指令,就可以找到剛剛建立的 Mutex 名稱了:
    
.\handle.exe -a | Select-String -Pattern Mutex
304: Mutant        \BaseNamedObjects\_RUYUT_MUTEX
    



參考資料:
Microsoft.Learn - Mutex Class

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com