yw3579293 发表于 2013-7-5 18:19:46

C#启动程序时检测运行多个实例

C# Code:

static class Program
{
   /// <summary>
   /// The main entry point for the application.
   /// </summary>
   
   static void Main()
   {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.ThreadException = new ThreadExceptionEventHandler(Application_ThreadException);//捕获系统所产生的异常。
      Application.ThreadExit = new EventHandler(Application_ThreadExit);
      
      #region 检查程序是否运行多实例
      if (Program.IsRunInstance())//检查程序是否运行多实例
      {
         Msg.Warning("系统已经启动!");
         Application.ExitThread();
         Application.Exit();
         return;
      }
      #endregion
      
      Application.Run(new frmMonitor());//运行主窗体
   }
   
   static void Application_ThreadExit(object sender, EventArgs e)
   {
      if (mutex != null)
      {
         mutex.ReleaseMutex();
         mutex = null;
      }
   }
   
   private static Mutex mutex = null;
   
   /// <summary>
   ///检查程序是否运行多实例
   /// </summary>
   public static bool IsRunInstance()
   {
      mutex = new Mutex(false, "指纹考勤系统");
      if (!mutex.WaitOne(0, false))//如果返回false则mutex已经被另一个线程所拥有
      {
         mutex.Close();
         mutex = null;
         return true;
      }
      return false;
   }
   
   private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
   {
      MonitorLog.AddLog(e.Exception.Message);//程序未知错误,写入日志
   }

l0711 发表于 2013-7-13 10:32:18

谢谢楼主分享

ydong95 发表于 2014-8-14 20:56:14

使用2013开发的程序好像没有用了。

yw3579293 发表于 2014-8-20 20:54:57

ydong95 发表于 2014-8-14 20:56
使用2013开发的程序好像没有用了。

我没试过2003的,我试试

ptdelphi 发表于 2014-8-25 17:08:32

不错——,
页: [1]
查看完整版本: C#启动程序时检测运行多个实例