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("已经运行了一个实例了。"); 

} 

} 

  

 

  

你可能感兴趣的:(C#)