C# WinForm模板实现单实例方法

C#默认的WinForm模板不支持设置单实例,并且没有像VB.NET那样的“生成单个实例应用程序”勾选选项。针对这个问题,可以采用多种方法来实现单实例应用程序:

  • 检测同名进程:通过Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)检查已有进程。
  • 命名互斥锁:使用Mutex。
  • 锁定文件:创建文件并在程序退出时释放,检查创建是否失败以确定是否已有实例在运行。
  • 使用VB.NET方法:WindowsFormsApplicationBase,该方法可以接收后续进程的启动参数,还可以弹出前序进程的主窗体。

WindowsFormsApplicationBase是一个Microsoft.VisualBasic.ApplicationServices命名空间下的类,是微软为VB.NET实现应用程序启动控制的类。其内部实现采用了命名管道通信。考虑到VB.NET和C#都是.NET Framework的一部分,可以放心使用WindowsFormsApplicationBase类。

  • IsSingleInstance属性:在构造方法中设置当前进程是否为单实例进程。
  • OnStartup方法:首次启动后运行,可以返回false退出进程。
  • OnStartupNextInstance方法:后续进程启动后的重写方法,前序进程会接收到后续进程的启动参数。
  • OnCreateMainForm方法:创建主窗体的重写方法,必须指定主窗体。

创建单实例应用程序的大概过程如下:

  • 创建项目名称为“SingleInstanceSample”的Windows窗体项目。
  • 添加引用“Microsoft.VisualBasic”。
  • 重命名“Form1”为“MainForm”。
  • 添加类“ApplicationBase.cs”,继承自“WindowsFormsApplicationBase”。
  • 修改“Program.cs”,从“ApplicationBase”启动。

标签:游戏攻略