在运行以下应用程序的第一个实例时,它会打印“已获取”。 但是,如果我开始第二个,它等待1分钟。 在该间隔期间,如果按下进入并离开“第一个实例”,它将在第二个实例中抛出“等待完成由于放弃的互斥锁”异常。 是不是获取线程? (因为第一个实例已经发布了它?!)
using (var m1 = new Mutex(false, "consoleapp"))
{
if (!m1.WaitOne(60000, false))
{
Console.WriteLine("It is already runnig");
}
else
{
Console.WriteLine("Acquired");
Console.ReadLine();
}
}
答案 0 :(得分:2)
您应该通过在else块中调用 m1.Release()来明确释放互斥锁的所有权。否则它会被释放但不会被释放,因此 WaitOne()抛出的异常[在Hristo的评论中]