C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
投稿:junjie
从 <<Windows Forms 2.0 Programming, 2nd Edition>> - Single-Instance Applications 这一章中, 学到了调用 VB.Net 中的 IsSingleInstance, 为 C# WinForm 添加只运行应用程序的单个实例 ( Single Instance Application). 是个好方法!
该方法显然从易用性上便捷与 Mutex 和 Process 这两种只运行单个应用程序实例的方法.
Single Instance 概念:
从.NET 2.0起,提供了WindowsFormsApplicationBase类来简化Windows应用程序编程,如果您是开发人员会感到感到奇怪,WindowsFormsApplicationBase类不在System.Windows.Forms 命名空间中而是属于Microsoft.VisualBasic.ApplicationServices 命名空间,也许这是作为VB.NET开发人员的优先好处吧。该类对应的程序集为Microsoft.VisualBasic.dll,不过该程序集包含在.NET框架中一起发布,如果要引用该程序集,在部署上不存在额外操作。
WindowsFormsApplicationBase类实现了类似于Application类的一些功能,不过该类还包含一些简化Windows Forms应用程序开发的接口,下面来简单了解一下。WindowsFormsApplicationBase类实现了对单实例应用程序的支持,通过设置IsSingleInstance 属性为True以及重写OnStartupNextInstance方法可以简洁的实现。
实现
在 Program.cs - Main 方法中
1. 项目中引用VB.Net 的DLL – Microsoft.VisualBasic.DLL,
Program.cs:
2. 在Program.cs中增加一个类
Program.cs:
public sealed class SingleInstanceApplication : WindowsFormsApplicationBase
{
public SingleInstanceApplication()
{
base.IsSingleInstance = true;
base.ShutdownStyle = ShutdownMode.AfterMainFormCloses;
}
protected override void OnCreateMainForm()
{
base.MainForm = new MainForm();
}
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs e)
{
base.OnStartupNextInstance(e);
base.MainForm.Activate();
}
}
3. 修改原 Application.Run(new MainForm()); 方法为:
//添加运行单进程程序
SingleInstanceApplication application = new SingleInstanceApplication();
application.Run(args);
SingleInstanceApplication类继承自WindowsFormsApplicationBase,在构造函数中设置为单实例模式,同时设置在主窗体关闭后退出应用程序。在继承类中,OnCreateMainForm方法被重写用来创建主窗体,如果要保证应用程序单一实例运行,还需要重写OnStartupNextInstance方法,在该应用程序的下一个应用程序实例启动时,OnStartupNextInstance方法会得到执行,在上面的实现代码中,调用基类方法同时激活主窗口。
您可能感兴趣的文章:
- vb.net与c#相互转换工具 网站地址列表
- 常用工具之 vb转化C# 数据连接串 正则表达式查询 源码世界 脚本字典
- ACCESS的参数化查询,附VBSCRIPT(ASP)和C#(ASP.NET)函数
- asp.net 程序性能优化的七个方面 (c#(或vb.net)程序改进)
- 在C#中调用VBScript、javascript等脚本的实现代码
- javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
- asp.net 验证码的简单制作(vb.net+C#)
- C# VB 实现10进制 16进制之间互相转换
- 获取客户端IP地址c#/vb.net各自实现代码
- C#利用ScriptControl动态执行JS和VBS脚本
- 如何让C#、VB.NET实现复杂的二进制操作
- C#中的除法运算符与VB.NET中的除法运算符
- C#、vb.net及SQL判断指定年份是否为闰年的方法
- C#调用VB进行简繁转换的方法
- C#中调用VB中Inputbox类的实现方法