在C# WinForm中如何使当前应用程序只允许启动一个实例(转)
我们在创建C# WinForm应用程序时,有时需要限制用户在同一时间只允许启动一个应用程序实例,例如安装程序包、系统扫描工具等等。当应用程序的一个实例已经处于运行状态时,如果用户企图再启动一个实例,则给用户一个提示并终止该实例。
这个其实很简单!我们知道,WinForm应用程序都有一个程序运行时的入口点,这点与WebForm应用程序不同,后者需要在任意一个可访问的Page中设置允许用户访问的权限,而WinForm应用程序只需要处理好程序的入口点就可以了。因此我们需要在Program class的Main函数中进行判断和处理。代码如下:
- [STAThread]
- static void Main()
- {
- bool createNew;
- using (System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out createNew))
- {
- if (createNew)
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
- }
- else
- {
- MessageBox.Show("Only one instance of this application is allowed!");
- }
- }
- }
主要使用了Sytem.Theading.Mutex对象,该对象用于解决多线程操作中的互斥问题,有关它的详细介绍读者可以参考MSDN。
http://msdn.microsoft.com/zh-cn/library/bwe34f1k(VS.80).aspx