通过 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 实现 WPF 单例启动
WPF 单例启动的例子,记一下。
参考 WPF Single Instance workaround
关键代码:
namespace 你的命名空间 { public class Startup { [STAThread] public static void Main(string[] args) { SingleInstanceApplicationWrapper wrapper = new SingleInstanceApplicationWrapper(); wrapper.Run(args); } } public class SingleInstanceApplicationWrapper : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase { private App app; // 这才是真正的WPF Application public SingleInstanceApplicationWrapper() { this.IsSingleInstance = true; } // 第一次打开调这个方法 protected override bool OnStartup( Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e) { app = new App(); app.Run(); return false; } // 再次打开调这个方法 protected override void OnStartupNextInstance( Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs e) { // 当用户试图再次打开这个程序的时候 MessageBox.Show("您正在运行该程序"); } } /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { } }
OnStartupNextInstance 的方法中,可以获取第一个实例的主窗体,进行参数传递。