我正在开发一个全新的应用程序。我是唯一使用它的人,因此我不可能与另一个人争用。然而,即便如此,Mutex
经常失败。这是我的代码示例。
using (Mutex mutex = new Mutex(false, @"Global\MS_NBR"))
{
System.Diagnostics.Trace.WriteLine("Before " + @"Global\MS_NBR");
if (!mutex.WaitOne(TimeSpan.FromSeconds(30), false))
throw new ArgumentOutOfRangeException();
System.Diagnostics.Trace.WriteLine("After " + @"Global\MS_NBR");
..Here I assign a unique member number.. (runs in a fraction of a second)
mutex.ReleaseMutex();
}
这种情况时常起作用,但频繁抛出ArgumentOutOfRangeException
,这表明它无法在30秒内获得Mutex。
答案 0 :(得分:0)
编辑此部分可能不适用,但我会尝试一下。我从未使用过命名的互斥锁,而是使用静态分配的互斥锁,并且从未遇到任何问题。
这一行:
using (Mutex mutex = ...
你分配一个命名的全局Mutex
并在using {}
子句结束时处理它。
静态定义它可能会有所帮助:
private static Mutex mutex = ...
永远不要丢弃它,永远不要重新创建它。只要应用程序运行,它就必须只有一个对象存在。