(引用了 Microsoft.VisualBasic.ApplicationServices)
SingleInstanceApplicationWrapper.cs
using System.Windows.Forms; using Microsoft.VisualBasic.ApplicationServices; namespace Highflyer { /// <summary> /// 单实例应用程序封装类 /// </summary> public class SingleInstanceApplicationWrapper : WindowsFormsApplicationBase { private readonly Form mainForm; public SingleInstanceApplicationWrapper(Form form) { mainForm = form; #if DEBUG this.IsSingleInstance = false; #endif #if RELEASE this.IsSingleInstance = true; #endif } protected override bool OnStartup(StartupEventArgs e) { Application.Run(mainForm); return false; } protected override void OnStartupNextInstance(StartupNextInstanceEventArgs e) { // 这里可以把本次使用的参数传给之前的实例,本人在一个WPF 屏幕键盘项目里传送了键盘显示方式(数字、英文、手写)参数 //e.BringToForeground = true; //if (e.CommandLine.Count > 0) //{ // app.DealArgs(e.CommandLine.ToArray()); //} } } }
Program.cs
using System; using System.Windows.Forms; using Highflyer; namespace Eparcar.ParkLocal.GateBoxClient { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm mainForm = new MainForm(); SingleInstanceApplicationWrapper wrapper = new SingleInstanceApplicationWrapper(mainForm); wrapper.Run(args); } } }