Mutex偶尔会失败

时间:2016-01-26 17:23:24

标签: c#

我正在开发一个全新的应用程序。我是唯一使用它的人,因此我不可能与另一个人争用。然而,即便如此,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。

1 个答案:

答案 0 :(得分:0)

编辑此部分可能不适用,但我会尝试一下。我从未使用过命名的互斥锁,而是使用静态分配的互斥锁,并且从未遇到任何问题。

这一行:

using (Mutex mutex = ...

你分配一个命名的全局Mutex并在using {}子句结束时处理它。

静态定义它可能会有所帮助:

private static Mutex mutex = ...

永远不要丢弃它,永远不要重新创建它。只要应用程序运行,它就必须只有一个对象存在。