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,貌似存在性能问题,希望聆听高见,如何处理此类问题。

  • 相关阅读:
    分离 附加 还原
    sql sever 数据表
    正则矩阵
    路由vue-router基础
    vue理解$nextTick
    vue组件
    vue事件处理
    vue列表渲染
    vue条件渲染
    vue class与style绑定
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/1998710.html
Copyright © 2011-2022 走看看