C#利用Mutex互斥量实现同时只有一个进程实例在运行
2011-07-18 14:49
821 查看
我们在做程序时,有时候希望在一台电脑上面只有一个进程实例在运行,利用Mutex互斥量可以实现了这个功能,方法及步骤如下:
关于互斥量Mutex的理解及用法可以参考博客/article/8253936.html
接下来分控制台程序和Winform程序两种情况下实现此功能
1.控制台程序
参考别人的博客的代码实验
运行以上代码生成的应用程序第一个实例,会得到结果
Running
保持第一个运行状态,运行第二个实例,得到结果
Another is Running
以上代码中创建了一个mutex,从其参数的解释中得知,第一个调用线程将得到互斥体的初始所属权,如果不释放的话,其他的线程得不到互斥体所有权
2.Winform程序
Winform程序可以在构造函数中添加以下代码即可实现,如下
刚才看别人的博客上面做有总结,如果大家想深入了解到话,可参考博客
/article/5947434.html
关于互斥量Mutex的理解及用法可以参考博客/article/8253936.html
接下来分控制台程序和Winform程序两种情况下实现此功能
1.控制台程序
参考别人的博客的代码实验
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace myConApp { class Test { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { bool flag = false; System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag); //第一个参数:true--给调用线程赋予互斥体的初始所属权 //第一个参数:互斥体的名称 //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true if (flag) { Console.Write("Running"); } else { Console.Write("Another is Running"); System.Threading.Thread.Sleep(5000);//线程挂起5秒钟 Environment.Exit(1);//退出程序 } Console.ReadLine(); } } }
运行以上代码生成的应用程序第一个实例,会得到结果
Running
保持第一个运行状态,运行第二个实例,得到结果
Another is Running
以上代码中创建了一个mutex,从其参数的解释中得知,第一个调用线程将得到互斥体的初始所属权,如果不释放的话,其他的线程得不到互斥体所有权
2.Winform程序
Winform程序可以在构造函数中添加以下代码即可实现,如下
public Form1() { InitializeComponent(); #region 只能运行一个客户端程序 bool flag = false; System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag); //第一个参数:true--给调用线程赋予互斥体的初始所属权 //第一个参数:互斥体的名称 //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true if (!flag) { MessageBox.Show("只能运行一个客户端程序!", "请确定", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Environment.Exit(1);//退出程序 } #endregion }运行结果,在打开一个实例的情况下,再次运行该程序则弹出对话框
刚才看别人的博客上面做有总结,如果大家想深入了解到话,可参考博客
/article/5947434.html
相关文章推荐
- System.Threading.Mutex:一台电脑上面只有一个进程实例在运行,利用Mutex互斥量可以实现了这个功能
- C#利用Mutex实现只运行一个程序实例
- C#利用Mutex实现只运行一个程序实例
- 使用互斥体Mutex 实现应用程序只有一个实例运行
- c# Winform 如何实现程序只能同时运行一个实例
- 利用互斥体(MUTEX)实现程序只允许运行一个实例
- 进程地址空间的共享(可以实现一个程序只有一个实例运行)
- 互斥对象(Mutex)、事件对象(Event) 与 关键代码段(CriticalSection) 的比较(互斥量Mutex 保证只有一个实例运行)
- 利用两个BrocastReceiver来保证同时只有一个实例在运行
- 利用内核对象----互斥量实现应用程序只运行一个实例
- C# 创建互斥进程(程序只能运行一个实例)
- 利用Mutex实现应用程序的单实例运行
- 利用Mutex实现应用程序的单实例运行
- Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
- 利用互斥控制程序只有一个运行实例
- 使用Mutex实现程序单实例运行(c#)
- 使用Mutex实现程序单实例运行(c#)
- [转]实现同时只允许运行一个程序实例
- PHP利用文件锁实现只运行一个实例
- 使用Mutex实现程序单实例运行(c#)