wpf 程序 启动唯一一个进程,避免多次打开

使用WindowsFormsApplicationBase

首先在项目中创建一个启动类

复制代码
    class Program
    {
        [STAThread]
        public static void Main(string[] args)
        {
            SingleInstanceManager manager = new SingleInstanceManager();
            manager.Run(args);
        }
    }

    /// <summary>
    /// 单例进程
    /// </summary>
    public class SingleInstanceManager : WindowsFormsApplicationBase
    {
        App app;

        public SingleInstanceManager()
        {
            this.IsSingleInstance = true;
        }

        protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
        {
            // First time app is launched
            app = new App();
            app.Run();
            return false;
        }

        protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
        {
            // Subsequent launches
            base.OnStartupNextInstance(eventArgs);
            app.Activate();
        }
    }
复制代码

然后再我们原先的app中,去掉Application_Startup事件的引用,使用重写的 protected override void OnStartup(StartupEventArgs e)

复制代码
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
           
          
                LoadComponent(this, new Uri("App.xaml", System.UriKind.Relative));


            MainWindow window = new MainWindow();
            window.Show();
        }
复制代码

 

app中添加激活方法

        public void Activate()
        {
            if (this.MainWindow != null)
            {
                this.MainWindow.Show();
                this.MainWindow.Activate();
            }
        }

 

 

这个时候运行报错会提示重复的main入口

右键项目属性 应用程序 启动对象更改你添加的入口类

至此,应用程序就会始终以单例的形式打开了!

 

posted @   一条大河啊波浪宽啊  阅读(912)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示