zoukankan      html  css  js  c++  java
  • 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("已经运行了一个实例了。"); 
    } 
    } 
    

      

     

      

  • 相关阅读:
    虚函数和纯虚函数
    MS CRM 2011中PartyList类型字段的实例化
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(4)
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(2)
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)
    MS CRM 2011 SDK 5.08已经发布
    MS CRM 2011 Q2的一些更新
    最近很忙
    Microsoft Dynamics CRM 2011最近的一些更新
    补一篇,Update Rollup 12 终于发布了
  • 原文地址:https://www.cnblogs.com/luofuxian/p/2658394.html
Copyright © 2011-2022 走看看