2011-10-13 20 views
0

我有一個C#控制檯應用程序同時運行的多個實例。在執行特定任務時,沒有其他人應該執行相同的任務。所以理想情況下,我希望在內存中有一些可以訪問的bool,在開始執行該任務之前,所有實例都可以檢查。如果布爾是真的,他們需要等待。執行任務的過程會在完成時將布爾值設置爲false。
我知道「互斥體」存在,但我不知道如何實現它,或者如果這是我需要的。哪個進程在內存中創建這個變量?其他人如何知道在記憶中找到它?Bool可通過多個應用程序訪問

任何幫助將不勝感激。

回答

4

一種方法是使用一個互斥,因爲你是跨進程這樣做,你需要使用一個名爲互斥:

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作爲名稱的一部分,以防止與其他應用程序發生命名衝突的可能性。

+0

感謝您的幫助,但菲利普張貼第一,所以我接受了他的答案。 +1雖然 – carlbenson

相關問題