当前位置: 移动技术网 > IT编程>开发语言>c# > C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)

C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)

2019年07月18日  | 移动技术网IT编程  | 我要评论
从 <<windows forms 2.0 programming, 2nd edition>>   -  singl

从 <<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:

复制代码 代码如下:
using microsoft.visualbasic.applicationservices;

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方法会得到执行,在上面的实现代码中,调用基类方法同时激活主窗口。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网