在某种程度上,如果我连续快速启动我的程序10次,但是一次只能执行一次,那么它是否可能。另一个继续等待工作程序完成或停止。
所以最后,如果我打开我的程序10次,所有10个程序应该连续工作,而不是同时工作。
这可能在c#中吗?
答案 0 :(得分:1)
您可以使用命名EventWaitHandle
来执行此操作,例如:
using System;
using System.Threading;
namespace Demo
{
static class Program
{
static void Main()
{
using (var waitHandle = new EventWaitHandle(true, EventResetMode.AutoReset, "MyHandleName"))
{
Console.WriteLine("Waiting for handle");
waitHandle.WaitOne();
try
{
// Body of program goes here.
Console.WriteLine("Waited for handle; press RETURN to exit program.");
Console.ReadLine();
}
finally
{
waitHandle.Set();
}
Console.WriteLine("Exiting program");
}
}
}
}
尝试运行此控制台应用的几个实例并观看输出。
答案 1 :(得分:0)
您可以使用系统范围的互斥锁或系统范围的信号量。如果您使用名称创建Mutex或Semaphore,它将对整个系统可见 - 换句话说,它可以从其他进程中看到。
Mutex syncMutex = new Mutex(false, "NAME OF MUTEX");
try
{
if(!syncMutex.WaitOne(MUTEX_TIMEOUT))
{
//fail to get mutex
return;
}
//mutex obtained do something....
}
catch(Exception ex)
{
//handle error
}
finally
{
//release mutex
syncMutex.ReleaseMutex();
}