protected override void OnStartup(StartupEventArgs e)
{
var mutex = new Mutex(true, "AsyncApp");
if (!mutex.WaitOne(TimeSpan.Zero, true))
{
MessageBox.Show("程序已存在");
Environment.Exit(0);
return;
}
base.OnStartup(e);
}
相关推荐
C# Mutex 实现单例程序 (单线程)
C#中Mutex是互斥锁,位于System.Threading 命名空间中。互斥锁是一种互斥的同步对象,意味着同一时间有且仅有一个线程。Mutex适用于一个共享资源每次只能被一个线程访问的情况,也就是控制多个线程相互之间的联系,不产生冲突和重复。 Mutex构造函数,第一个参数决定是否当前线程获取即将创建的Mutex的所有权,第二个参数是互斥变量名(也就是Mutex的名字),第三个是新创建tru...
WPF 程序实例检测(只能启动一个)
本文介绍了在C# WPF程序中实现单实例运行控制的完整方案。核心方法是使用Mutex互斥锁机制,通过创建唯一命名的系统级互斥对象来检测程序是否已运行。实现要点包括:1) 在App.xaml.cs中重写OnStartup方法创建Mutex;2) 使用GUID确保互斥锁名称唯一;3) 可选添加激活已有窗口功能;4) 在程序退出时释放互斥锁资源。文章还提供了权限处理建议、错误排查方法以及简化版本实现,确保程序在Windows各版本中可靠运行。该方案能有效防止程序重复启动,同时保持代码简洁高效。
C# WPF上位机开发(多线程中锁的使用)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 多线程编程一般都会涉及到锁的时候,很多人可能觉得很意外,为什么会需要这么一个锁。本质上,这主要还是因为多线程的执行中,本身一部分逻辑并不是原子操作导致的。有一个池塘喂鱼的例子最为经典。假设池塘有两个人同时去喂鱼,每一个人喂鱼之前,会先看一下池塘边上的牌子。假设牌子是红色的,代表已经喂过了;假设牌子是绿色的,则代表鱼还没有喂过。鱼本身只能吃一顿,如果连续喂的话,那么鱼可能会撑死。
WPF 使用互斥锁Mutex实现应用程序启动唯一实例,避免重复启动
C#中的Mutex是互斥锁,位于命名空间System.Threading中,它是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。在系统运行过程中,如果当前有一个线程或者进程拥有它,在没有释放之前,其它线程或进程是没有权利拥有它的,并且使用其构造函数创建对象时设置的name是在系统中唯一的,如: /*创建具有唯一名称的互斥锁*/ AppMutex = new Mutex(true, "TopToolsApp", out var createdNew); 其中名称“Top
c#winform/wpf限制只能运行一个(互斥体)
在wpf中需要在app.xaml.cs里面写这段代码。
wpf mutex 控制应用程序只启动一次
mutex可以 用来控制应用程序只启动一次,但是要注意mutex不能被回收,否则就无法发挥作用了。 例如: bool ret; using (System.Threading.Mutex mutex = new System.Threading.Mutex(true, "WpfMuerterrrterterttex", out ret)) ...
001001004_解析一段互斥锁的代码
摘要:本文解析WPF程序通过Mutex实现单实例运行的机制。核心代码在程序启动时创建唯一命名的互斥锁,首个实例获得锁后正常启动,后续实例检测到锁已被占用则提示并退出。文章从代码逐行解析、互斥锁原理(系统级唯一令牌)、三种运行场景(首次启动/重复启动/重启)到注意事项(命名空间引入、锁名唯一性等)进行全面讲解,为工业级应用提供"防多开"的可靠解决方案。 (98字)
WPF单实例启动
本文介绍了WPF应用程序实现单实例运行的互斥锁机制。通过静态构造函数创建系统级Mutex对象,并使用程序GUID确保唯一性,防止重复启动。
C#唯一进程的处理Winform/WPF
在C#客户端(Winform/WPF)开发过程中,有的情况需要确保程序的唯一性,如果启动同时启动同一个程序多次,可能导致数据,通信等异常。下面有两种方法来实现唯一进程。1.使用进程(Process)判断;2.使用互斥体(Metux)实现
WPF单例程序,和单例程序重启
我们添加了一个Restart方法,该方法首先释放互斥锁,然后启动新的应用程序实例,最后关闭当前的应用程序。这样,新的应用程序实例就可以获取互斥锁,而不会因为互斥锁已经被占用而无法启动。我们可以先在程序启动时给程序加一个互斥锁,保证该应用程序运行进程的唯一性。在想要实现程序的自重启时,释放当前的互斥锁,然后再启动新的实例。在WPF应用程序中,想要实现软件重启,可以再Start一次该软件的exe程序。但是有些时候我们想要这个程序是唯一运行的单例,而不是可以多开的程序。
wpf 实现单实例运行与重启
bool createNew = false; GlobalParam.MutexRun = new System.Threading.Mutex(true, UNIQUESTR, out createNew); if (createNew) { var application = new App(); application.InitializeComponent(); application.Run(); } else { MessageBox.Sh..
WPF(四)Application3:如何实现单实例的应用程序(Single Instance)
先来看第一种最简单粗暴的做法: 检测进程名,如果名称一样,则表示程序已经启动了,就不再启动. protected override void OnStartup(StartupEventArgs e) { // Get Reference to the current Process Process thisProc = Process.Ge...
WPF 防止程序重复启动,检查程序是否已经运行
第一种方法:抓取程序的进程名,在系统已运行进程中检索该进程名是否已经存在。第二种方法:利用互斥函数。
WPF:如何实现单实例的应用程序(Single Instance)
原文: WPF:如何实现单实例的应用程序(Single Instance) 好吧,这是我将WPF与Windows Forms进行比较的系列文章的第四篇,讨论一下如何实现单实例(single instance) 先来看第一种最简单粗暴的做法: 检测进程名,如果名称一样,则表示程序已经启动了,就不再启...
防止应用多开-WPF
启动第一个实例之后,第二个就不能再次启动。互斥锁实现阻止应用多开。
UnityLauncherPro 如何取代官方 Hub:命名管道与单实例锁实现原理
UnityLauncherPro 是一款免费的非官方 Unity Hub 替代品(Project Launcher),通过命名管道通信和 Mutex 单实例锁,实现了比官方 Unity Hub 更轻量的项目启动管理,还能"劫持" Hub 的 IPC 管道,让编辑器启动时彻底告别官方 Hub。 🎯 **一句话概括**:它用 Windows 的 **命名管道(Named Pipe)+ Mutex
c# 程序添加多开限制,WPF程序添加多开限制
c# 程序添加多开限制,WPF程序添加多开限制。
WPF:实现主应用程序单一实例运行方式总结
本文介绍常见的实现主应用程序单一实例运行的几种方式。 方式一: public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { Process thisProc = Proce...
1749




被折叠的 条评论
为什么被折叠?



