我知道如何使用互斥鎖強制應用程序的單個實例,這就是我使用的。允許運行兩個應用程序實例
我的一些用戶要求我允許多個實例運行。我不想刪除控制代碼,因爲我可以將它看作是災難的祕訣,因爲多個實例可能會寫入相同的文件,日誌等等。
我也許可以處理的事情,如果實例的數量限制爲兩個。我目前的想法是允許第一個以活動模式運行,第二個以某種形式的只讀模式運行。
那麼我如何控制實例數不超過兩個?
感謝
我知道如何使用互斥鎖強制應用程序的單個實例,這就是我使用的。允許運行兩個應用程序實例
我的一些用戶要求我允許多個實例運行。我不想刪除控制代碼,因爲我可以將它看作是災難的祕訣,因爲多個實例可能會寫入相同的文件,日誌等等。
我也許可以處理的事情,如果實例的數量限制爲兩個。我目前的想法是允許第一個以活動模式運行,第二個以某種形式的只讀模式運行。
那麼我如何控制實例數不超過兩個?
感謝
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
}
這聽起來像你想要一個名爲系統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();
}
}
}
信號燈允許數量的併發線程訪問一個資源,當它用一個名字創建時,它是一個操作系統範圍的信號量,所以它很適合你的目的。
我打算看看Semaphores。謝謝 – ScruffyDuck
你可以有兩個互斥! –