`
hulunberbus
  • 浏览: 855472 次
文章分类
社区版块
存档分类
最新评论

使应用程序只能运行单个实例。

 
阅读更多

以前在VB中要防止应用程序运行多个实例的方式很简单,判断APP.PrevInstance 就可以了。

来看一下.NET中是如何实现的,主要使用Mutex来实现进程间同步

using System;
using System.Threading;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace LogisticsSystem
{
/// <summary>
/// 使应用程序只能运行一个实例 的摘要说明。
/// </summary>
public class AppSingleton
{
static Mutex m_Mutex;

public static void Run()
{
if(IsFirstInstance())
{
Application.ApplicationExit += new EventHandler(OnExit);
Application.Run();
}

}
public static void Run(ApplicationContext context)
{
if(IsFirstInstance())
{
Application.ApplicationExit += new EventHandler(OnExit);
Application.Run(context);
}
}
public static void Run(Form mainForm)
{
if(IsFirstInstance())
{

Application.ApplicationExit += new EventHandler(OnExit);

Application.Run(mainForm);


}
else
{

MessageBox.Show("应用程序已启动,请在任务管理中关闭后再启动!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
static bool IsFirstInstance()
{
m_Mutex = new Mutex(false,"SingletonApp Mutext");
bool owned = false;
owned = m_Mutex.WaitOne(TimeSpan.Zero,false);
return owned ;
}
static void OnExit(object sender,EventArgs args)
{
m_Mutex.ReleaseMutex();
m_Mutex.Close();
}
}
}

具体使用是如下

using System;
using System.Drawing;
using System.Windows.Forms;
namespace LogisticsSystem
{
/// <summary>
/// MainClass 的摘要说明。
/// </summary>
public class MainClass
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{


AppSingleton.Run(new mainForm());
//Application.Run(new mainForm());
}
}
}

分享到:
评论

相关推荐

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

    主要介绍了C#实现只运行单个实例应用程序的方法,本文使用的是VB.Net的IsSingleInstance方法实现,优于Mutex 和 Process 这两种只运行单个应用程序实例的方法,需要的朋友可以参考下

    应该程序只有一个实例

    c++ vs2008 应用程序只有一个实例 简单的demo 启动程序

    让应用程序只运行一个实例的实现方法

    在我们的程序当中如果要实现类似《360软件管家》的功能,就要解决两个问题,首先是要判断该程序已有一个实例在运行,其次是要将已运行的应用程序实例激活,同时退出第二个应用程序实例。 对于第一个问题,我们可以...

    Visual.C#.编程精彩百例

    实例31 创建C#组件与客户应用程序 实例32 用OpenFileDialog类浏览或打开文件 实例33 在C#程序中获得Win32 API 实例34 从C#中调用COM组件 实例35 在C#程序中修改HTML文件标题 实例36 下载Web页面 实例37 创建多...

    《Visual.C#.编程精彩百例》配套光盘part1

    实例39 单个线程同步运行 实例40 多线程同步运行 实例41 线程Thread Relative Static跟踪与实现 实例42 线程池(ThreadPool)的应用 实例43 多线程互斥运行 实例44 多线程时钟应用程序 ...

    《Visual.C#.编程精彩百例》配套光盘.part2

    实例39 单个线程同步运行 实例40 多线程同步运行 实例41 线程Thread Relative Static跟踪与实现 实例42 线程池(ThreadPool)的应用 实例43 多线程互斥运行 实例44 多线程时钟应用程序 ...

    TestCafe-RemoteWorkers:如何通过单个TestCafe实例使Continuous Integration System与远程工作者一起工作

    TestCafe-如何使持续集成系统与Remote Workers一起使用(具有单个TestCafe实例) 本示例演示了如何使用单个TestCafe实例,以使Remote Workers具有Continuous Integration系统功能。 测试结果将保存到log.txt文件中。...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例202 计算程序运行时间 257 实例203 从控制台输入密码 258 9.4 Math类的使用 259 实例204 角度和弧度的转换 259 实例205 三角函数的使用 260 实例206 反三角函数的使用 261 实例207 双曲函数的使用 262 实例208 ...

    oneoff:管理Cloud Foundry应用程序的一次性运行任务

    有一个来骇客解决此问题,但它们依赖手动部署步骤,例如,使用自定义启动命令临时部署应用程序的单个实例。 呸。 使用oneoff,您可以将任务定义为在正常部署期间自动运行的代码。 oneoff提供以下功能... 确保在应用...

    naiserator:Naiserator基于单个应用程序规范创建全套Kubernetes应用程序基础架构

    运行指定数量的应用程序实例的Deployment Service指向的应用程序终结点 Horizontal pod autoscaler ,可自动缩放应用程序 Service account用于授予对托管资源的正确权限 (可选)如果在应用程序清单中启用,则以下...

    Java范例开发大全(全书源程序)

    实例203 获取程序运行环境的信息 353 第4篇 Java高级开发技术 第12章 集合(教学视频:45分钟) 358 12.1 Set 358 实例204 利用HashSet删除学生 358 实例205 不重复的随机数序列 360 实例206 运用映射的相关...

    distributedProjectNetwork:分布式网络应用程序的Java解决方案

    地图和其他设置,例如音频,图形结束游戏确保运行三个实例,一个用于服务器,两个用于客户端要求: Java 8 最少一个客户端实例一个服务器实例主菜单应用程序启动时的主菜单选择屏幕。 您可以选择要连接的网络,也...

    java范例开发大全

    实例203 获取程序运行环境的信息 353 第4篇 Java高级开发技术 第12章 集合(教学视频:45分钟) 358 12.1 Set 358 实例204 利用HashSet删除学生 358 实例205 不重复的随机数序列 360 实例206 运用映射的相关类(Map...

    Java范例开发大全 (源程序)

     实例203 获取程序运行环境的信息 353  第4篇 Java高级开发技术  第12章 集合(教学视频:45分钟) 358  12.1 Set 358  实例204 利用HashSet删除学生 358  实例205 不重复的随机数序列 360  实例206 ...

Global site tag (gtag.js) - Google Analytics