C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
从<<WindowsForms2.0Programming,2ndEdition>> - Single-InstanceApplications这一章中,学到了调用VB.Net中的IsSingleInstance,为C#WinForm添加只运行应用程序的单个实例(SingleInstanceApplication).是个好方法!
该方法显然从易用性上便捷与Mutex和Process这两种只运行单个应用程序实例的方法.
SingleInstance概念:
从.NET2.0起,提供了WindowsFormsApplicationBase类来简化Windows应用程序编程,如果您是开发人员会感到感到奇怪,WindowsFormsApplicationBase类不在System.Windows.Forms命名空间中而是属于Microsoft.VisualBasic.ApplicationServices命名空间,也许这是作为VB.NET开发人员的优先好处吧。该类对应的程序集为Microsoft.VisualBasic.dll,不过该程序集包含在.NET框架中一起发布,如果要引用该程序集,在部署上不存在额外操作。
WindowsFormsApplicationBase类实现了类似于Application类的一些功能,不过该类还包含一些简化WindowsForms应用程序开发的接口,下面来简单了解一下。WindowsFormsApplicationBase类实现了对单实例应用程序的支持,通过设置IsSingleInstance属性为True以及重写OnStartupNextInstance方法可以简洁的实现。
实现
在Program.cs-Main方法中
1.项目中引用VB.Net的DLL–Microsoft.VisualBasic.DLL,
Program.cs:
usingMicrosoft.VisualBasic.ApplicationServices;
2.在Program.cs中增加一个类
Program.cs:
publicsealedclassSingleInstanceApplication:WindowsFormsApplicationBase { publicSingleInstanceApplication() { base.IsSingleInstance=true; base.ShutdownStyle=ShutdownMode.AfterMainFormCloses; }
protectedoverridevoidOnCreateMainForm() { base.MainForm=newMainForm(); }
protectedoverridevoidOnStartupNextInstance(StartupNextInstanceEventArgse) { base.OnStartupNextInstance(e); base.MainForm.Activate(); } }