• C# 创建互斥程序_只允许运行一个程序实例


    方法一:

         使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例,但是这种方法有一个问题,当程序运行中需要采取重启程序时会出现问题,

    没有同意程序运行的情况下,仍然提示有形同程序在运行。
    把program.cs文件里的Main()函数改为如下代码:

     private static Mutex s_mutex;
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                bool bCreateNew = false;
                try
                {
                    s_mutex = new Mutex(true, "EJYD_VmsServer", out bCreateNew);
                    if (bCreateNew)
                    {
                        System.Threading.Thread.CurrentThread.IsBackground = true;
                        Application.Run(new MainForm());
                    }
                    else
    
                    {
                        Utility.MessageBoxShowWarning("你已经运行了一个该程序,不可同时运行两个!");                       
                    }
                }
                finally
                {
                    if (s_mutex != null && bCreateNew)
                    {
                        s_mutex.ReleaseMutex();
                    }
                }
            }
    

    方法二:采用判断进程的方式,我们在运行程序前,查找进程中是否有同名的进程,同时运行位置也相同程,如是没有运行该程序,如果有就就不运行.在C#中应用System.Diagnostics名字空间中的Process类来实现,主要代码如下: 
    1,在program.cs文件中添加函数如下:

            /// <summary>
            /// 判断是否运行进程
            /// </summary>
            /// <returns></returns>
            public static System.Diagnostics.Process RunningInstance()
            {
                System.Diagnostics.Process current = System.Diagnostics.Process.GetCurrentProcess();
                System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();
                foreach (System.Diagnostics.Process process in processes) //查找相同名称的进程 
                {
                    if (process.Id != current.Id) //忽略当前进程 
                    {
                        if (process.ProcessName == current.ProcessName)//判断进程名称是否和当前运行进程名称一样
                        {
                            return process;
                        }
                    }
                }
                return null;
            } 
    

      2,把Main ()函数改为如下代码:

    static void Main() 
    { 
    if(RunningInstance()==null) 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
    else 
    { 
     MessageBox.Show("已经运行了一个实例了。"); 
    } 
    } 
    

      

     

      

  • 相关阅读:
    获取ip
    PHP大牛笔记收藏
    WordPress伪静态规则设置
    PHP 中 include 和 require 的区别详解
    Wordpress学习链接整理
    手机访问自动跳转
    微信web开发工具
    接入支付宝出现交易订单处理失败,请稍后再试(ALI64)的错误【转】
    HTTPS科普扫盲帖【转】
    php 好用的函数
  • 原文地址:https://www.cnblogs.com/luofuxian/p/2658394.html
Copyright © 2020-2023  润新知