要求:
A. 1 用户登录可以System.Windows.Form
在ProcessName
.
B. 2 个不同的用户登录每个都能够System.Windows.Form
在ProcessName
.
C. MutexChecker
在它自己的类中而不是 的成员,Form
因为处理互斥锁的责任会根据用户操作从一种形式更改为另一种形式。
D. SaidForm
在 Mutex 创建后异步启动。所以我无法执行using
声明。
问题:
在其他 SO 帖子中,我看到类似于以下标记为“不安全”的代码。但是,没有给出代码被标记为“不安全”的原因。相反,提供了一个全局互斥锁作为解决方案。全局互斥锁在机器范围内工作,因此不符合要求。
我试过的:
mutexChecker.RunCheck()
来自说的电话System.Windows.Form
public class MutexChecker:IDisposable
{
private Mutex mutex;
public bool RunCheck()
{
bool createdNew;
mutex = new Mutex(initiallyOwned: true, name: "AppName", createdNew: out createdNew);
if (!createdNew)
{
MessageBox.Show("AppName is already running. Please complete the other note before opening a new window.");
}
return createdNew;
}
public void Dispose()
{
mutex.ReleaseMutex();//ERROR: safe handle has been disposed
mutex.Dispose();//Does not always release the mutex for some unknown reason
}
在Form.Dispose
.
问题
如何安全地创建满足要求的互斥锁?