创建单例winform应用程序的一种更好的方式
2011-05-04 06:09
134 查看
我们经常会创建一些单例winform应用程,但如何保证单例,最常用的方法就是扫描进程,但这种方式缺点是显而易见的,这里介绍一种方式。
代码:
注意点:
1使用Mutex类,设置一个静态命名的实例
如:private static Mutex singleton;
注意名称是Assembly.GetExecutingAssembly().FullName,为程序入口程序集的名字
注意
在运行终端服务的服务器上,已命名的系统 mutex 可以具有两级可见性。 如果名称以前缀“Global\”开头,则 mutex 在所有终端服务器会话中均为可见。 如果名称以前缀“Local\”开头,则 mutex 仅在创建它的终端服务器会话中可见。 在这种情况下,服务器上各个其他终端服务器会话中都可以拥有一个名称相同的独立 mutex。 如果创建已命名 mutex 时不指定前缀,则它将采用前缀“Local\”。 在终端服务器会话中,只是名称前缀不同的两个 mutex 是独立的 mutex,这两个 mutex 对于终端服务器会话中的所有进程均为可见。 即:前缀名称“Global\”和“Local\”说明 mutex 名称相对于终端服务器会话(而并非相对于进程)的范围。
微软说明
2通过创建Mutex的实例来判断程序是否已启动。
作者:xuexiaodong2009 发表于2011-5-4 14:09:00 原文链接
阅读:48 评论:0 查看评论
代码:
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Threading; using System.Reflection; static class Program { private static Mutex singleton; /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); bool has=Check() ; if (has) { Form form = new Form1(); form.FormClosed += new FormClosedEventHandler(form_FormClosed); Application.Run(form); } else { MessageBox.Show("已启动"); } } static void form_FormClosed(object sender, FormClosedEventArgs e) { if (singleton != null) { singleton.Close(); } } private static bool Check() { bool has=false; singleton=new Mutex(false,Assembly.GetExecutingAssembly().FullName,out has); // Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName; return has; } } }
注意点:
1使用Mutex类,设置一个静态命名的实例
如:private static Mutex singleton;
注意名称是Assembly.GetExecutingAssembly().FullName,为程序入口程序集的名字
注意
在运行终端服务的服务器上,已命名的系统 mutex 可以具有两级可见性。 如果名称以前缀“Global\”开头,则 mutex 在所有终端服务器会话中均为可见。 如果名称以前缀“Local\”开头,则 mutex 仅在创建它的终端服务器会话中可见。 在这种情况下,服务器上各个其他终端服务器会话中都可以拥有一个名称相同的独立 mutex。 如果创建已命名 mutex 时不指定前缀,则它将采用前缀“Local\”。 在终端服务器会话中,只是名称前缀不同的两个 mutex 是独立的 mutex,这两个 mutex 对于终端服务器会话中的所有进程均为可见。 即:前缀名称“Global\”和“Local\”说明 mutex 名称相对于终端服务器会话(而并非相对于进程)的范围。
微软说明
2通过创建Mutex的实例来判断程序是否已启动。
private static bool Check() { bool has=false; singleton=new Mutex(false,Assembly.GetExecutingAssembly().FullName,out has); // Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName; return has; } 3在程序关闭时,关闭Mutex的实例 form.FormClosed += new FormClosedEventHandler(form_FormClosed); static void form_FormClosed(object sender, FormClosedEventArgs e) { if (singleton != null) { singleton.Close(); } }
作者:xuexiaodong2009 发表于2011-5-4 14:09:00 原文链接
阅读:48 评论:0 查看评论
相关文章推荐
- 创建单例winform应用程序的一种更好的方式
- 用 Java 技术创建 RESTful Web (服务 JAX-RS:一种更为简单、可移植性更好的替代方式)
- ClickOnce 发布WinForm应用程序(非签名方式)
- CentOS下创建应用程序的快捷方式
- C# WinForm创建包含备注的快捷方式实例
- Cocos2dx 3.0 过渡篇(十八) Cocos2d-x 3.0rc,又一种创建项目方式
- .NET 应用程序中创建桌面快捷方式
- C# WinForm应用程序创建启动界面
- 采用COM方法 创建应用程序的快捷方式(菜鸟版)
- Android之快捷方式一——通过应用程序创建快捷方式
- HttpUnit: 一种在 WebSphere Studio 中测试 Web 应用程序的改进方式
- 创建单例winform应用程序
- Winform 创建桌面快捷方式并开机启动
- 创建应用程序方式
- 另外一种DataGrid与Datalist的嵌套--更好的方式[原创]
- 一种新的javascript对象创建方式Object.create()
- ClickOnce 发布WinForm应用程序(签名方式)
- “Visual Studio .NET 无法创建或打开应用程序。问题很可能是因为本地WEB本地服务器上没有安装所需的组件。请运行Visual Studio .NET安装程序并添加WEB开发组件“的一种解决方案
- 关于在c#中创建用户控件后,winform应用程序在调用中无法通过点击用户控件的子控件为其自动添加事件代码的问题
- drupal7中的创建table表格的一种简单方式