2011-08-08 45 views
3

我知道如何使用互斥鎖強制應用程序的單個實例,這就是我使用的。允許運行兩個應用程序實例

我的一些用戶要求我允許多個實例運行。我不想刪除控制代碼,因爲我可以將它看作是災難的祕訣,因爲多個實例可能會寫入相同的文件,日誌等等。

我也許可以處理的事情,如果實例的數量限制爲兩個。我目前的想法是允許第一個以活動模式運行,第二個以某種形式的只讀模式運行。

那麼我如何控制實例數不超過兩個?

感謝

+3

你可以有兩個互斥! –

回答

4
bool IsFree = false; 


Mutex mutex = new Mutex(true, "MutexValue1", out IsFree); 

if(!IsFree) 
    mutex = new Mutex(true, "MutexValue2", out IsFree); 

if(!IsFree) 
{ 
    //two instances are already running 
} 
+0

+1,我喜歡這個想法 –

+0

工作正常 - 謝謝 – ScruffyDuck

+1

-1這段代碼聞起來 - 嘗試信號量而不是 –

12

這聽起來像你想要一個名爲系統Semaphore與2

這裏計數是一個例子:

class Program 
{ 
    private const int MaxInstanceCount = 2; 
    private static readonly Semaphore Semaphore = new Semaphore(MaxInstanceCount, MaxInstanceCount, "CanRunTwice"); 

    static void Main(string[] args) 
    {    
     if (Semaphore.WaitOne(1000)) 
     { 
      try 
      { 
       Console.WriteLine("Program is running"); 
       Console.ReadLine(); 
      } 
      finally 
      { 
       Semaphore.Release(); 
      } 
     } 
     else 
     { 
      Console.WriteLine("I cannot run, too many instances are already running"); 
      Console.ReadLine(); 
     } 
    } 
} 

信號燈允許數量的併發線程訪問一個資源,當它用一個名字創建時,它是一個操作系統範圍的信號量,所以它很適合你的目的。

+0

我打算看看Semaphores。謝謝 – ScruffyDuck

相關問題