【发布时间】:2010-08-14 17:47:49
【问题描述】:
我有一个简单的 .NET 程序,它检查是否已启动另一个实例:
Mutex mutex = new Mutex(false,"MyMutexName");
if (!mutex.WaitOne(1))
return;
try{
//do stuff
}
catch{ //exceptions}
finally
{
mutex.ReleaseMutex();
}
我的问题是,如果您在程序结束时忘记释放它,互斥锁究竟会发生什么?它在某些 Windows 控制面板组件中可见吗?它住在哪里?
【问题讨论】:
-
命名互斥体通常仅用于协调跨进程通信,这根本不是您的示例所显示的。
-
@Steven:为此使用互斥锁非常有用。比尝试检测以前的窗口或进程名称或其他东西要好得多。
-
我更新了我的问题,因为您在代码中做了两个半相关的事情:1)使用命名互斥锁来检测应用程序的先前实例的存在 2)跨进程同步那个互斥体。