• WINFORM 只能运行一个实例问题


    WINFROM 只能运行一个实例 目前网上比较多的又2种方法

    第一种:Mutex

    /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                //声明互斥体。
                Mutex mutex = new Mutex(false, "ThisShouldOnlyRunOnce ");
                //判断互斥体是否使用中。
                bool Running = !mutex.WaitOne(0, false);

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                if (!Running)
                    Application.Run(new LoginForm());
                else
                    MessageBox.Show("应用程序已经启动! ");
            }

    第二种:判断进程

      private static Process RunningInstance()
            {
                Process current = Process.GetCurrentProcess();
                Process[] processes = Process.GetProcessesByName(current.ProcessName);
                //遍历与当前进程名称相同的进程列表  
                foreach (Process process in processes)
                {
                    //如果实例已经存在则忽略当前进程  
                    if (process.Id != current.Id)
                    {
                        //保证要打开的进程同已经存在的进程来自同一文件路径
                        if (Assembly.GetExecutingAssembly().Location.Replace("/", "//") == current.MainModule.FileName)
                        {
                            //返回已经存在的进程
                            return process;

                        }
                    }
                }
                return null;
            }

    用2种方式分别测试了下,发现第二种判断进程是完全可以的,第一种在多用户多窗口模式下会判断失败。

  • 相关阅读:
    Python 内置函数 —— format
    命名集 —— 名字结构
    命名集 —— 名字结构
    存储与主板的外设接口
    存储与主板的外设接口
    验证码的认识
    验证码的认识
    windows 路径
    windows 路径
    极限的求法
  • 原文地址:https://www.cnblogs.com/merray/p/2749137.html
Copyright © 2020-2023  润新知