我曾经用过Mutex的方法来实现窗体的互斥运行。。但是会出现失效混乱的情况,令我苦恼不已。
Mutex的方法如下:
using System.Threading; bool Create;
Mutex m =new Mutex( false, "name", out Create );
if( Create ) Application.Run(new FormName());
我想出了这样一个办法:
1.在主窗体MainFrm的定义静态的bool boolFrmName变量,用于存储窗体的运行状态
2.在需要启动的窗体FormName中也要创建静态Form变量,
public static Form thisForm = new Form();
并在该窗体的Load事件中给thisForm变量赋值 thisForm=this;
2.在解决方案中添加一个类Judge,将类改成static类型,在类中添加如下方法:
public static void RunForm(string FormName)
{
switch(FormName)
case"RunFormName": MainFrm.boolFrmName=true; break;
case"CloseFromName":MainFrm.boolFrmName=false;break;
default: break;
}
3.在启动时先检测窗体是否被运行,如果窗体已经运行则激活该窗体
if(boolFrm==false) FormName newForm = new FormName(); newForm.Show(); Judeg.RunForm("RunFormName");
else FormName.thisForm.Activate();