当前位置: 首页 > 编程笔记 >

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

应俭
2023-03-14
本文向大家介绍C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance),包括了C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)的使用技巧和注意事项,需要的朋友参考一下

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

 类似资料:
  • 本文向大家介绍C#使用Mutex简单实现程序单实例运行的方法,包括了C#使用Mutex简单实现程序单实例运行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用Mutex简单实现程序单实例运行的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#实现托盘程序并禁止多个应用实例运行的方法,包括了C#实现托盘程序并禁止多个应用实例运行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现托盘程序并禁止多个应用实例运行的方法。分享给大家供大家参考,具体如下: 托盘程序的制作: 1.把NotifyIcon控件拉一个到窗体上,并设置NotifyIcon的Icon(很重要!否则运行后看不到效果) 2.窗体关闭时,将程

  • 本文向大家介绍C#简单实现防止多个程序运行的方法,包括了C#简单实现防止多个程序运行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#简单实现防止多个程序运行的方法。分享给大家供大家参考,具体如下: 更多关于C#相关内容感兴趣的读者可查看本站专题:《C#面向对象程序设计入门教程》、《C#常见控件用法教程》、《C#程序设计之线程使用技巧总结》及《C#数据结构与算法教程》 希望本文所述

  • 问题内容: 有时我会看到许多应用程序,例如msn,Windows Media Player等都是单实例应用程序(当用户在应用程序运行时执行时,将不会创建新的应用程序实例)。 在中,我为此使用类,但是我不知道如何在Java中执行此操作。 问题答案: 我在主要方法中使用以下方法。这是我所见过的最简单。

  • 在我的代码库中有两个实现org.springframework.boot.ApplicationRunner的类。当我的应用程序被加载时,实现ApplicationRunner的两个类都被加载。有没有任何命令行参数可以用来控制实现ApplicationRunner的特定类被加载,尽管这两个类在类级都有@component注释? 目前,我正在命令行中传递一个参数,如 “$springbootapp_

  • 问题内容: 有没有一种Python方式可以只运行一个程序实例? 我想出的唯一合理的解决方案是尝试将其作为服务器在某个端口上运行,然后尝试将第二个程序绑定到同一端口-失败。但这不是一个好主意,也许有比这更轻巧的东西了吗? (考虑到程序有时可能会失败,例如segfault-因此“锁定文件”之类的东西将无法工作) 问题答案: 以下代码可以完成此工作,它是跨平台的,并且可以在Python 2.4-3.2上