1.添加引用Microsoft.VisualBasic
2.创建 app类
class App : System.Windows.Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ShowMainWindow();
}
/// <summary>
/// 显示主界面
/// </summary>
public void ShowMainWindow()
{
new MainWindow().Show();
}
}
}
3.创建包装器类
需要继承:Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
class SingleInstanceApplicationWrapper:Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
{
private App app; //私有app类
public SingleInstanceApplicationWrapper()
{
this.IsSingleInstance = true; //设置为单实例应用程序
}
/// <summary>
/// 启动事件
/// </summary>
/// <param name="eventArgs"></param>
/// <returns></returns>
protected override bool OnStartup(StartupEventArgs eventArgs)
{
// base.OnStartup(eventArgs); 注意此处不能调用基类方法
app = new App();
app.Run();
return false;
}
/// <summary>
/// 启动另一个实例调用
/// </summary>
/// <param name="eventArgs"></param>
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
base.OnStartupNextInstance(eventArgs);
app.ShowMainWindow(); //调用方法,而不创建新的app实例
}
}
4.创建Startup类
[STAThread] //单线程
public static void Main(string[] args)
{
SingleInstanceApplicationWrapper wrapper = new SingleInstanceApplicationWrapper();
wrapper.Run(args); //运行
}
结果:
多次运行应用程序,启动了多个窗体,但是实际应用程序实例只有一个。