C#启动程序时检测运行多个实例
C#启动程序时检测运行多个实例C# Code:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
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);//程序未知错误,写入日志
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
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);//程序未知错误,写入日志
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
