我有一個C#控制檯應用程序同時運行的多個實例。在執行特定任務時,沒有其他人應該執行相同的任務。所以理想情況下,我希望在內存中有一些可以訪問的bool,在開始執行該任務之前,所有實例都可以檢查。如果布爾是真的,他們需要等待。執行任務的過程會在完成時將布爾值設置爲false。
我知道「互斥體」存在,但我不知道如何實現它,或者如果這是我需要的。哪個進程在內存中創建這個變量?其他人如何知道在記憶中找到它?Bool可通過多個應用程序訪問
任何幫助將不勝感激。
我有一個C#控制檯應用程序同時運行的多個實例。在執行特定任務時,沒有其他人應該執行相同的任務。所以理想情況下,我希望在內存中有一些可以訪問的bool,在開始執行該任務之前,所有實例都可以檢查。如果布爾是真的,他們需要等待。執行任務的過程會在完成時將布爾值設置爲false。
我知道「互斥體」存在,但我不知道如何實現它,或者如果這是我需要的。哪個進程在內存中創建這個變量?其他人如何知道在記憶中找到它?Bool可通過多個應用程序訪問
任何幫助將不勝感激。
您需要使用system-wide Mutex,您可以通過提供名稱來創建該system-wide Mutex。查看example for the constructor MSDN頁面。要做到這一點
一種方法是使用一個互斥,因爲你是跨進程這樣做,你需要使用一個名爲互斥:
public class App
{
static Mutex SingleInstanceMutex = new Mutex(false, "MyApp{2CA3B0BE-26B7-46d3-9CF3-234B9EFE8681}");
public static void Main()
{
while(true)
{
if (SingleInstanceMutex.WaitOne(TimeSpan.Zero, true));
{
Console.WriteLine("Only one process can be doing this at a time")
SingleInstanceMutex.ReleaseMutex();
}
}
}
}
我喜歡使用GUID作爲名稱的一部分,以防止與其他應用程序發生命名衝突的可能性。
感謝您的幫助,但菲利普張貼第一,所以我接受了他的答案。 +1雖然 – carlbenson