设置WPF单实例启动方案 WPF单开

本文详细介绍如何在WPF应用中实现单实例运行,避免多次启动同一程序导致的资源浪费。通过添加StartupSingleInstance类并继承自WindowsFormsApplicationBase,设置IsSingleInstance为true,重写启动事件和下一个实例启动事件,确保程序仅运行一个实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

举个例子,首先在使用Excel时,当打开多个Excel工作簿时候会发现在任务管理器中,Excel进程始终只有一个:

 

但是我们编写WPF程序后,反复打开这个程序,会出现很多相同进程:

 

而且占用内存很大。

 

下面介绍一个方法来让WPF单开:

我们在WPF项目中添加一个类StartupSingleInstance.cs

让他继承至Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase

 

首先要引用Microsoft.VisualBasic这个COM

详细代码如下(供参考):

class StartupSingleInstance : WindowsFormsApplicationBase
    {
        public StartupSingleInstance()
        {
            //设置单实例应用程序
            this.IsSingleInstance = true;
        }
        //定义一个公共的App对象
        private App app;


        /// <summary>
        /// 重写启动事件
        /// </summary>
        /// <param name="eventArgs"></param>
        /// <returns></returns>
        protected override bool OnStartup(StartupEventArgs eventArgs)
        {
            app = new App();
            app.Run();
            return false;
        }

        /// <summary>
        /// 重写下一个实例启动事件
        /// </summary>
        /// <param name="eventArgs"></param>
        protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
        {
            base.OnStartupNextInstance(eventArgs);
            //如果再次启动则只显示窗体
            app.ShowWindows();
        }

 

这里的ShowWindows方法可以写在App.xaml.cs里:

        public void ShowWindows()
        {
            MainWindow win = new MainWindow();
            win.Show();
        }

 

然后在StartupSingleInstance.cs类里添加主函数

        //单线程启动单元
        [STAThread()]
        public static void Main(string[] args)
        {
            //启动
            StartupSingleInstance startupSingleInstance = new StartupSingleInstance();
            startupSingleInstance.Run(args);
        }

 

在App.xaml里也重写OnStartup方法:

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            ShowWindows();
        }

 

在解决方案属性里修改启动对象:

 

 

然后启动调试。

到Debug里反复打开程序;效果如图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值