手机
当前位置:查字典教程网 >编程开发 >C#教程 >C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码
C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码
摘要:我们开发WinFrom程序,很多时候都希望程序只有一个实例在运行,避免运行多个同样的程序,一是没有意义,二是容易出错。为了更便于使用,笔者整...

我们开发WinFrom程序,很多时候都希望程序只有一个实例在运行,避免运行多个同样的程序,一是没有意义,二是容易出错。

为了更便于使用,笔者整理了一段自己用的代码,可以判断程序是否在运行,只运行一个实例,而且能实现当程序在运行时,再去双击程序图标,直接呼出已经运行的程序。

下面看代码,只需在程序的入口文件中加如下代码即可:

static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //1.这里判定是否已经有实例在运行 //只运行一个实例 Process instance = RunningInstance(); if (instance == null) { //1.1 没有实例在运行 Application.Run(new frmMain()); } else { //1.2 已经有一个实例在运行 HandleRunningInstance(instance); } //Application.Run(new frmMain()); } //2.在进程中查找是否已经有实例在运行 #region 确保程序只运行一个实例 private static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); //遍历与当前进程名称相同的进程列表 foreach (Process process in processes) { //如果实例已经存在则忽略当前进程 if (process.Id != current.Id) { //保证要打开的进程同已经存在的进程来自同一文件路径 if (Assembly.GetExecutingAssembly().Location.Replace("/", "") == current.MainModule.FileName) { //返回已经存在的进程 return process; } } } return null; } //3.已经有了就把它激活,并将其窗口放置最前端 private static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, 1); //调用api函数,正常显示窗口 SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端 } [DllImport("User32.dll")] private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(System.IntPtr hWnd); #endregion }

【C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码】相关文章:

C# 手动/自动保存图片的实例代码

C#中判断某类型是否可以进行隐式类型转换

winform天气预报小工具(附源码下载)

C#中 城市线路图的纯算法以及附带求极权值

C#泛型约束的深入理解

C#+MO实现一个道路编辑软件(刚开始)

c# winform多线程的小例子

用C#在本地创建一个Windows帐户(DOS命令)

用C#获取硬盘序列号,CPU序列号,网卡MAC地址的源码

c# winform窗口一直置顶显示在桌面最上方或最底层的方法

精品推荐
分类导航