zoukankan      html  css  js  c++  java
  • 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种方式分别测试了下,发现第二种判断进程是完全可以的,第一种在多用户多窗口模式下会判断失败。

  • 相关阅读:
    个人作业——软件工程实践总结作业
    用户调查报告
    β总结
    凡事预则立
    学习进度条
    作业八——单元测试练习(个人练习)
    作业七——“南通大学教务管理系统微信公众号” 用户体验分析
    作业六——团队作业(学生成绩录入系统设计与实现)
    作业5——需求分析(学生成绩录入系统)
    作业4.2:结对项目—— 词频统计(第二阶段)
  • 原文地址:https://www.cnblogs.com/merray/p/2749137.html
Copyright © 2011-2022 走看看