WPF使用互斥锁Mutex实现程序启动唯一实例

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
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);
}        

1. C# 进程间同步机制(Mutex和EventWaitHandle)实现单一应用启动 C# 程序如何实现只有一个应用实例在运行,如果重复启动,会激活已经启动的应用 阅读详情

相关推荐

C# Mutex 实现单例程序 (单线程)

C#Mutex互斥锁,位于System.Threading 命名空间中。互斥锁是一种互斥的同步对象,意味着同一时间有且仅有一个线程。Mutex适用于一个共享资源每次只能被一个线程访问的情况,也就是控制多个线程相互之间的联系,不产生冲突和重复。 Mutex构造函数,第一个参数决定是否当前线程获取即将创建的Mutex的所有权,第二个参数是互斥变量名(也就是Mutex的名字),第三个是新创建tru...

weixin_43602710的博客 1749

WPF 程序实例检测(只能启动一个)

本文介绍了在C# WPF程序实现实例运行控制的完整方案。核心方法是使用Mutex互斥锁机制,通过创建唯一命名的系统级互斥对象来检测程序是否已运行。实现要点包括:1) 在App.xaml.cs中重写OnStartup方法创建Mutex;2) 使用GUID确保互斥锁名称唯一;3) 可选添加激活已有窗口功能;4) 在程序退出时释放互斥锁资源。文章还提供了权限处理建议、错误排查方法以及简化版本实现,确保程序在Windows各版本中可靠运行。该方案能有效防止程序重复启动,同时保持代码简洁高效。

StevenChen的博客 496

C# WPF上位机开发(多线程中锁的使用

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 多线程编程一般都会涉及到锁的时候,很多人可能觉得很意外,为什么会需要这么一个锁。本质上,这主要还是因为多线程的执行中,本身一部分逻辑并不是原子操作导致的。有一个池塘喂鱼的例子最为经典。假设池塘有两个人同时去喂鱼,每一个人喂鱼之前,会先看一下池塘边上的牌子。假设牌子是红色的,代表已经喂过了;假设牌子是绿色的,则代表鱼还没有喂过。鱼本身只能吃一顿,如果连续喂的话,那么鱼可能会撑死。

嵌入式-老费,一个分享专业嵌入式知识的blog 1873

WPF 使用互斥锁Mutex实现应用程序启动唯一实例,避免重复启动

C#中的Mutex互斥锁,位于命名空间System.Threading中,它是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。在系统运行过程中,如果当前有一个线程或者进程拥有它,在没有释放之前,其它线程或进程是没有权利拥有它的,并且使用其构造函数创建对象时设置的name是在系统中唯一的,如: /*创建具有唯一名称的互斥锁*/ AppMutex = new Mutex(true, "TopToolsApp", out var createdNew); 其中名称“Top

生命不止就奋斗不息 2359

c#winform/wpf限制只能运行一个(互斥体)

wpf中需要在app.xaml.cs里面写这段代码。

weixin_58760781的博客 852

wpf mutex 控制应用程序启动一次

mutex可以 用来控制应用程序启动一次,但是要注意mutex不能被回收,否则就无法发挥作用了。 例如: bool ret; using (System.Threading.Mutex mutex = new System.Threading.Mutex(true, "WpfMuerterrrterterttex", out ret)) ...

weixin_34055787的博客 184

001001004_解析一段互斥锁的代码

摘要:本文解析WPF程序通过Mutex实现实例运行的机制。核心代码在程序启动时创建唯一命名的互斥锁,首个实例获得锁后正常启动,后续实例检测到锁已被占用则提示并退出。文章从代码逐行解析、互斥锁原理(系统级唯一令牌)、三种运行场景(首次启动/重复启动/重启)到注意事项(命名空间引入、锁名唯一性等)进行全面讲解,为工业级应用提供"防多开"的可靠解决方案。 (98字)

qq_39302144的博客 218

WPF实例启动

本文介绍了WPF应用程序实现实例运行的互斥锁机制。通过静态构造函数创建系统级Mutex对象,并使用程序GUID确保唯一性,防止重复启动

Moqiqiuzi之家 460

C#唯一进程的处理Winform/WPF

C#客户端(Winform/WPF)开发过程中,有的情况需要确保程序唯一性,如果启动同时启动同一个程序多次,可能导致数据,通信等异常。下面有两种方法来实现唯一进程。1.使用进程(Process)判断;2.使用互斥体(Metux)实现

海盗Sharp的博客 912

WPF单例程序,和单例程序重启

我们添加了一个Restart方法,该方法首先释放互斥锁,然后启动新的应用程序实例,最后关闭当前的应用程序。这样,新的应用程序实例就可以获取互斥锁,而不会因为互斥锁已经被占用而无法启动。我们可以先在程序启动时给程序加一个互斥锁,保证该应用程序运行进程的唯一性。在想要实现程序的自重启时,释放当前的互斥锁,然后再启动新的实例。在WPF应用程序中,想要实现软件重启,可以再Start一次该软件的exe程序。但是有些时候我们想要这个程序唯一运行的单例,而不是可以多开的程序

weixin_38940097的博客 843

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..

u013220323的专栏 784

WPF(四)Application3:如何实现实例的应用程序(Single Instance)

先来看第一种最简单粗暴的做法: 检测进程名,如果名称一样,则表示程序已经启动了,就不再启动. protected override void OnStartup(StartupEventArgs e) { // Get Reference to the current Process Process thisProc = Process.Ge...

weixin_30553777的博客 597

WPF 防止程序重复启动,检查程序是否已经运行

第一种方法:抓取程序的进程名,在系统已运行进程中检索该进程名是否已经存在。第二种方法:利用互斥函数。

SJ15630070060的博客 1602

WPF:如何实现实例的应用程序(Single Instance)

原文: WPF:如何实现实例的应用程序(Single Instance) 好吧,这是我将WPF与Windows Forms进行比较的系列文章的第四篇,讨论一下如何实现实例(single instance) 先来看第一种最简单粗暴的做法: 检测进程名,如果名称一样,则表示程序已经启动了,就不再启...

weixin_33775572的博客 254

防止应用多开-WPF

启动第一个实例之后,第二个就不能再次启动互斥锁实现阻止应用多开。

helloworlddm的博客 313

UnityLauncherPro 如何取代官方 Hub:命名管道与单实例实现原理

UnityLauncherPro 是一款免费的非官方 Unity Hub 替代品(Project Launcher),通过命名管道通信和 Mutex实例锁,实现了比官方 Unity Hub 更轻量的项目启动管理,还能"劫持" Hub 的 IPC 管道,让编辑器启动时彻底告别官方 Hub。 🎯 **一句话概括**:它用 Windows 的 **命名管道(Named Pipe)+ Mutex

gitblog_00318的博客 1009

c# 程序添加多开限制,WPF程序添加多开限制

c# 程序添加多开限制,WPF程序添加多开限制。

866

WPF:实现主应用程序单一实例运行方式总结

本文介绍常见的实现主应用程序单一实例运行的几种方式。 方式一: public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { Process thisProc = Proce...

weixin_30338461的博客 211
上一篇: c# 目录遍历
tdsheep
博客等级 码龄5年 11粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值