以前在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方法实现,优于Mutex 和 Process 这两种只运行单个应用程序实例的方法,需要的朋友可以参考下
c++ vs2008 应用程序只有一个实例 简单的demo 启动程序
在我们的程序当中如果要实现类似《360软件管家》的功能,就要解决两个问题,首先是要判断该程序已有一个实例在运行,其次是要将已运行的应用程序实例激活,同时退出第二个应用程序实例。 对于第一个问题,我们可以...
实例31 创建C#组件与客户应用程序 实例32 用OpenFileDialog类浏览或打开文件 实例33 在C#程序中获得Win32 API 实例34 从C#中调用COM组件 实例35 在C#程序中修改HTML文件标题 实例36 下载Web页面 实例37 创建多...
实例39 单个线程同步运行 实例40 多线程同步运行 实例41 线程Thread Relative Static跟踪与实现 实例42 线程池(ThreadPool)的应用 实例43 多线程互斥运行 实例44 多线程时钟应用程序 ...
实例39 单个线程同步运行 实例40 多线程同步运行 实例41 线程Thread Relative Static跟踪与实现 实例42 线程池(ThreadPool)的应用 实例43 多线程互斥运行 实例44 多线程时钟应用程序 ...
TestCafe-如何使持续集成系统与Remote Workers一起使用(具有单个TestCafe实例) 本示例演示了如何使用单个TestCafe实例,以使Remote Workers具有Continuous Integration系统功能。 测试结果将保存到log.txt文件中。...
实例202 计算程序运行时间 257 实例203 从控制台输入密码 258 9.4 Math类的使用 259 实例204 角度和弧度的转换 259 实例205 三角函数的使用 260 实例206 反三角函数的使用 261 实例207 双曲函数的使用 262 实例208 ...
有一个来骇客解决此问题,但它们依赖手动部署步骤,例如,使用自定义启动命令临时部署应用程序的单个实例。 呸。 使用oneoff,您可以将任务定义为在正常部署期间自动运行的代码。 oneoff提供以下功能... 确保在应用...
运行指定数量的应用程序实例的Deployment Service指向的应用程序终结点 Horizontal pod autoscaler ,可自动缩放应用程序 Service account用于授予对托管资源的正确权限 (可选)如果在应用程序清单中启用,则以下...
实例203 获取程序运行环境的信息 353 第4篇 Java高级开发技术 第12章 集合(教学视频:45分钟) 358 12.1 Set 358 实例204 利用HashSet删除学生 358 实例205 不重复的随机数序列 360 实例206 运用映射的相关...
地图和其他设置,例如音频,图形结束游戏确保运行三个实例,一个用于服务器,两个用于客户端要求: Java 8 最少一个客户端实例一个服务器实例主菜单应用程序启动时的主菜单选择屏幕。 您可以选择要连接的网络,也...
实例203 获取程序运行环境的信息 353 第4篇 Java高级开发技术 第12章 集合(教学视频:45分钟) 358 12.1 Set 358 实例204 利用HashSet删除学生 358 实例205 不重复的随机数序列 360 实例206 运用映射的相关类(Map...
实例203 获取程序运行环境的信息 353 第4篇 Java高级开发技术 第12章 集合(教学视频:45分钟) 358 12.1 Set 358 实例204 利用HashSet删除学生 358 实例205 不重复的随机数序列 360 实例206 ...