【发布时间】:2015-01-20 15:08:46
【问题描述】:
我对 Mutex 完全陌生。
我不明白这是什么意思:
WaitOne(TimeSpan) 阻塞当前线程直到当前实例 接收信号,使用 TimeSpan 指定时间间隔。 (继承自 WaitHandle。)
例如如果我使用:
static void Main()
{
using(Mutex mutex = new Mutex(false, appGuid))
{
if(!mutex.WaitOne(2000, false))
{
MessageBox.Show("Instance already running");
return;
}
GC.Collect();
Application.Run(new Form1());
}
}
是不是意味着一旦行了
if(!mutex.WaitOne(2000, false))
被触发,它会等待 2 秒,然后再检查线程上是否有锁 ?
【问题讨论】:
-
您是否意识到您提供的文档引用与您编写的代码的方法不同?
-
就这个问题而言,布尔重载无论如何都没有任何区别。
-
时间参数用于定义timeout,即允许等待的最大时间。
WaitOne会在超时到期前尝试获取所有权,从“调用时立即”开始^^ -
嗯,这很简单,你把这段代码弄错了。很确定您已经知道,索取手册并不是获得所需答案的好方法。 .NET Framework 已经很好地支持单实例应用程序,不要自己编写。
标签: c# multithreading mutex