0

在运行以下应用程序的第一个实例时,它会打印“Acquired”。但是,如果我开始第二个,它会等待 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();
            }

        }
4

1 回答 1

2

您应该通过在 else 块中调用m1.Release()来显式释放互斥锁的所有权。否则它会被处理但不会被释放,因此WaitOne()抛出异常[在 Hristo 的评论中]

于 2016-07-09T17:38:19.630 回答