0

class OneAtATimePlease
{
    static void Main()
    {

        using (var mutex = new Mutex(false, "oreilly.com OneAtATimeDemo"))
        {
            if (mutex.WaitOne(TimeSpan.FromSeconds(3), false))
                RunProgram();
            else
            {
                Console.WriteLine("Another instance of the app is running. Bye!");
                return;
            }
        }
    }
    static void RunProgram()
    {
        Console.WriteLine("Running. Press Enter to exit");
        Console.ReadLine();
    }
}

但是这些行等待有人调用Set()函数:

 if (mutex.WaitOne(TimeSpan.FromSeconds(3), false))
                RunProgram();

set在这儿打电话?这个线程永远不会被释放......(或者会?)

我错过了什么?

4

1 回答 1

1

如果有人没有运行 WaitOne(),它会立即返回 true。否则,它会阻塞!然后完成的程序导致等待程序之一立即返回真值。

于 2012-06-19T19:48:18.297 回答