C# Mutex Timespan 向新手解释
C# Mutex Timespan explained to newbie
我对 Mutex 完全陌生。
我不明白这是什么意思:
WaitOne(TimeSpan) Blocks the current thread until the current instance
receives a signal, using a TimeSpan to specify the time interval.
(Inherited from 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 秒后检查线程上是否有锁
?
这意味着当前线程将阻塞,直到有人调用 mutex.ReleaseMutex()
或 2000 毫秒超时结束。如果达到超时,操作 returns false
.
有关方法调用的更多详细信息,请参阅 this MSDN link。
所以最重要的是,你传递什么值作为超时并不重要,对 mutex.ReleaseMutex()
的调用无论如何都会立即释放线程 - 超时是存在的,因此调用不会无限等待如果互斥体永远不会释放或在应用程序的情况认为延迟的时间释放。
我对 Mutex 完全陌生。
我不明白这是什么意思:
WaitOne(TimeSpan) Blocks the current thread until the current instance receives a signal, using a TimeSpan to specify the time interval. (Inherited from 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 秒后检查线程上是否有锁 ?
这意味着当前线程将阻塞,直到有人调用 mutex.ReleaseMutex()
或 2000 毫秒超时结束。如果达到超时,操作 returns false
.
有关方法调用的更多详细信息,请参阅 this MSDN link。
所以最重要的是,你传递什么值作为超时并不重要,对 mutex.ReleaseMutex()
的调用无论如何都会立即释放线程 - 超时是存在的,因此调用不会无限等待如果互斥体永远不会释放或在应用程序的情况认为延迟的时间释放。