项目中需要两个不同的窗体不能同时打开,只能打开一个,且项目可以多开,如果其他项目中有一个窗体打开,另一个项目中的两个窗体都不能打开。所以使用Mutex
错误代码:
formLoad函数里
myMutex = new Mutex(true, "mutexname", out mutexWasCreated);
if (!mutexWasCreated)//对返回值进行判断
{
InforMsgBox("请先关相关业务窗体!", "提醒");
if (myMutex != null)
{
myMutex.ReleaseMutex();
myMutex.Close();
myMutex.Dispose();
myMutex = null;
}
Close();
return;
}
formCloseing函数里
if (myMutex != null)
{
myMutex.ReleaseMutex();
myMutex.Close();
myMutex.Dispose();
myMutex = null;
}
关闭窗体会出现 Object synchronization method was called from an unsynchronized block of code
的异常。
formCloseing里倒是没有什么问题,formLoad函数应该改为
myMutex = new Mutex(true, "mutexname", out mutexWasCreated);
if (!mutexWasCreated)//对返回值进行判断
{
InforMsgBox("请先关相关业务窗体!", "提醒");
if (myMutex != null)
{
//这句应该注释掉。
//myMutex.ReleaseMutex();
myMutex.Close();
myMutex.Dispose();
myMutex = null;
}
Close();
return;
}
问题解决。