C# WinForm 只运行一个程序实例
以下方法转自网络
![](/assets/blank.gif)
![](/assets/blank.gif)
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;
namespace WinFormStudy
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Process instance = RunningInstance();
if (instance == null)
{
//没有实例在运行
Application.Run(new Form1());
}
else
{
//已经有一个实例在运行
HandleRunningInstance(instance);
}
}
#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;
}
private static void HandleRunningInstance(Process instance)
{
MessageBox.Show("已经在运行!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
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
}
}
或者
![](/assets/blank.gif)
![](/assets/blank.gif)
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WinFormStudy
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
bool ret;
System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out ret);
if (ret)
{
System.Windows.Forms.Application.EnableVisualStyles(); //这两行实现 XP 可视风格
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.Run(new Form1());
// frmMain 为你程序的主窗体,如果是控制台程序不用这句
m.ReleaseMutex();
}
else
{
MessageBox.Show(null, "有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。\n\n这个程序即将退出。", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
// 提示信息,可以删除。
Application.Exit();//退出程序
}
}
}
}
转载于:https://www.cnblogs.com/freeliver54/archive/2008/11/22/1338816.html
C# WinForm 只运行一个程序实例相关推荐
- C# 只允许运行一个程序实例
using System; using System.Windows.Forms; using System.Runtime.InteropServices;//使用DllImport的必须. usi ...
- C# WinForm只允许运行一个窗体实例
大概看了看别人的方法,都是从语法的角度巧妙实现的. 我要实现的目的是dialogForm.Show(); 点击按钮显示对话框窗体,如果窗体没有关闭,再次点击,不重复显示. 我用了个笨方法,就是用一个静 ...
- 转:让程序只运行一个实例的四种方法
先留着以后有用. 让程序只运行一个实例的四种方法 综述:让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建前,有窗口的程序在窗口创建前,检查系统中是否已经设置了某些特定标志了,如果 ...
- 只运行一个实例的方法
在VC++ 中编程中,只运行一个实例的方法主要有两类: 1 遍历当前的所有窗口,查找相同的实例.为了便于查找,一般要事先设一个查找标志. 2 利用系统提供的互斥对象或信标,直接让系统抑制重复的实例. ...
- 开发中常用的只允许一个程序运行的办法createmutex
//开发中常用的只允许一个程序运行的办法//程序以单例模式运行 常用办法,创建一个互斥量 //由于互斥量只允许一个进程或者线程占用 会创建失败,利用这个特性可以做到单例运行改程序 #include & ...
- 为什么建议一个容器中只运行一个进程
文章首发于:https://www.cnblogs.com/JasonCeng/p/14814888.html 在云原生与容器化时代浪潮下,大多数新手的普遍认识是"容器=虚拟机", ...
- 只缺一个程序员 如何让产品实现
2019独角兽企业重金招聘Python工程师标准>>> 译者:王登科 这是一篇我的翻译,来自Derek Sivers的How to hire a programmer to make ...
- 同一个PC只能运行一个应用实例(考虑多个用户会话情况)
原文:同一个PC只能运行一个应用实例(考虑多个用户会话情况) 1 class Program 2 { 3 private static Mutex m; 4 5 [STAThread] 6 stati ...
- 在OpenEIM中每运行一个程序
在OpenEIM中每运行一个程序,系统资源就会减少.有的程序会消耗大量的系统资源,即使把资源关闭,在内存中还是有一些没有的DLL文件在运行,这样就便得系统的运行速度下降,甚至出现上述问题. 我们可以通 ...
- “只差一个程序员”这句话还能说多少年?
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:"只差一个程序员"这句话还能说多少年? 这句话一般出现在非技术创始人在招募技术合伙人的时候,而且多是创始团 ...
最新文章
- python的闭包函数
- *30.什么是微内核
- Linux 文件系统概述
- 技术干货 | 高性能短链设计与实现
- 南京信息工程大学c语言真题,南京信息工程大学C语言试题库.doc
- 列表_月隐学python第6课
- linux钟java运行命令,在java中运行linux命令
- 前端js判空处理,js字符串判空,js数组判空
- 监听文件变化并自动运行 npm script
- C++创建动态链接库(*.dll)
- SAS接口互连完全指南
- 【转载】素数快速打表(据说是线性复杂度)
- poj3667 hotel
- paip.陕北方言 广东方言的不同单字 1千高频字
- 单片机开发,stm32开发,串口下载软件,flymcu
- revit二次开发 材质类别分析
- 这群人,用8年讲述体育能有多迷人
- office2007无法使用宏的解决方法
- CrazyTalk 8 中文版 照片会说话动画制作 带动作脚本 点头眨眼动画制作
- 【论文阅读】Improving Document-level Relation Extraction via Contextualizing Mention Representations and W
热门文章
- ps人像精修照片步骤_PS人像精修
- pytorch查看模型weight与grad
- 国产操作系统剽窃Linux内核可耻!
- [转载]从零开始学习OpenGL ES之五 – 材质
- 在地图上点击一下,在图层上画一个点,并显示相关的信息
- 关于 System.getProperty
- Xcode12.3 、12.4 运行 iOS15 :The code signature version is no longer supported
- 你家的APS系统有这些功能吗?排程系统功能盘点
- Java基础93 JDBC连接MySQL数据库
- 035 spring amqp