zoukankan      html  css  js  c++  java
  • wpf mutex 控制应用程序只启动一次

    mutex可以 用来控制应用程序只启动一次,但是要注意mutex不能被回收,否则就无法发挥作用了。

    例如:

       bool ret;
                using (System.Threading.Mutex  mutex = new System.Threading.Mutex(true, "WpfMuerterrrterterttex", out ret))
                {
                    if (!ret)
                        Environment.Exit(0);
                }
    

    这样子写,mutex会被回收,如下的方法是正确的:

    using System;
    using System.Windows;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// App.xaml 的交互逻辑
        /// </summary>
        public partial class App : Application
        {
            System.Threading.Mutex mutex;
    
            public App()
            {
                this.Startup += new StartupEventHandler(App_Startup);
            }
    
            void App_Startup(object sender, StartupEventArgs e)
            {
                bool ret;
                mutex = new System.Threading.Mutex(true, "WpfMuerterrrterterttex", out ret);
    
                if (!ret)
                    Environment.Exit(0);
            }
        }
    }
    

    之前通过查找process的方法来控制应用程序启动,如下,发现这个方法有bug:在多用户登录后,只有一个用户可以正常启动程序,也就是说,进程是跨用户的。

                int processCount = Process.GetProcessesByName("windowWPF").Where(o => o.Id != Process.GetCurrentProcess().Id).Count();
                if (processCount > 1)
                    Environment.Exit(0);
    

    关于mutex,貌似存在性能问题,希望聆听高见,如何处理此类问题。

  • 相关阅读:
    文本特殊符号汇集
    十大编程算法助程序员走上高手之路
    单例模式(Singleton)
    flink time and watermark
    关于maven依赖关系的问题
    幂等
    乐观锁和悲观锁的一个例子
    Elasticsearch logstash filter
    ELK filebeat的安装
    使用 Python 验证数据集中的体温是否符合正态分布
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/1998710.html
Copyright © 2011-2022 走看看