通过 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 实现 WPF 单例启动

本文介绍了一种WPF应用程序的单例启动实现方法。通过使用`SingleInstanceApplicationWrapper`类,确保了程序只能有一个实例运行,并展示了如何处理首次启动与后续启动尝试的情况。
摘要由CSDN通过智能技术生成

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 的方法中,可以获取第一个实例的主窗体,进行参数传递。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值