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

 更新时间:2014年07月03日 11:37:13   投稿:junjie  
这篇文章主要介绍了C#实现只运行单个实例应用程序的方法,本文使用的是VB.Net的IsSingleInstance方法实现,优于Mutex 和 Process 这两种只运行单个应用程序实例的方法,需要的朋友可以参考下

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

相关文章

  • FileShare枚举的使用小结(文件读写锁)

    FileShare枚举的使用小结(文件读写锁)

    其实/FileShare就是控制文件流的“访问权限”,当然,这仅仅是入门的文件操作,自己做了笔记,也希望能给大家带来帮助
    2014-01-01
  • C#实现鼠标裁剪图像功能

    C#实现鼠标裁剪图像功能

    这篇文章主要为大家详细介绍了C#实现鼠标裁剪图像功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C#实现广度优先搜索的实例代码

    C#实现广度优先搜索的实例代码

    广度优先搜索算法(BFS)是图或树搜索的重要算法,学习BFS能提高理解图结构的能力,对解决复杂图问题有帮助,实际应用包括网络爬虫、社交网络分析、迷宫求解等,感兴趣的可以了解一下
    2024-10-10
  • C#图片处理3种高级应用

    C#图片处理3种高级应用

    本文介绍C#图片处理高级应用,这些功能并无多大技术含量。全部基于.Net Framework类库完成,代码中包含了C#图片处理的一些基础知识,与大家分享,个人能力有限,不足之处还请及时指正。
    2015-10-10
  • 详解从零开始---用C#制作扫雷游戏

    详解从零开始---用C#制作扫雷游戏

    这篇文章主要介绍了详解从零开始---用C#制作扫雷游戏,非常具有实用价值,需要的朋友可以参考下
    2017-06-06
  • C#中DataSet转化为实体集合类的方法

    C#中DataSet转化为实体集合类的方法

    这篇文章主要介绍了C#中DataSet转化为实体集合类的方法,是非常实用的技巧,需要的朋友可以参考下
    2014-10-10
  • C#如何优雅的结束线程

    C#如何优雅的结束线程

    这篇文章主要介绍了C#如何优雅的结束一个线程,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • 浅谈C#设计模式之代理模式

    浅谈C#设计模式之代理模式

    这篇文章主要介绍了浅谈C#设计模式之代理模式,需要的朋友可以参考下
    2014-12-12
  • C#数据结构之堆栈(Stack)实例详解

    C#数据结构之堆栈(Stack)实例详解

    这篇文章主要介绍了C#数据结构之堆栈(Stack),结合实例形式较为详细的分析了堆栈的原理与C#实现堆栈功能的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • C#新手常犯的错误汇总

    C#新手常犯的错误汇总

    这篇文章主要介绍了C#新手常犯的错误汇总,对于经验丰富的C#程序员同样具有很好的参考借鉴价值,需要的朋友可以参考下
    2014-08-08

最新评论