c#数字图像处理算法典型实例程序实例下载_限制程序只能同时启动一个实例-唯一...

本文介绍如何确保程序只运行一个实例,避免多个实例导致的问题。使用Mutex互斥量和进程遍历两种方法实现,保障程序稳定性和资源独占。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

49b0b68f743aa470b76b3fd84e947858.png

一山不容二虎

在上一篇文章《给服务配上一个守护者-守护进程》中,我们给windows添加了一个守护进程,并将守护进程设置为开机启动,实现开机自动守护服务的效果。

但是如果我们不小心,双击了两次守护程序,这时候,就会同时运行两个保护程序。甚至出现n多个实例同时运行:

f7cda9716132215be6fc23cdfe6b5914.png

4个保护程序。。。

这时候,就可能出现两虎相争的情况,从而导致一些未知的错误。

那么如何避免这种情况呢?当然就是限制程序,只能启动一个示例!

大致思路

如何限制只能启动一个实例:

启动时检测是否已经启动程序,如果已经启动程序,直接退出,不执行后续的代码即可。

算法很简单,那如何用C#来实现呢?

Mutex互斥量

Mutex互斥量,是Windows系统中,可以跨进程访问的一种资源。通常使用Mutex来管理不能共享的资源。比如只允许一个线程操作的文件。

此时我们可以把保护程序,视为一种不能共享的资源。所以我们就可以使用Mutex来实现只能启动一个程序的效果。

代码非常简单:

2367d57dda3e330bd072d6ff59207a1e.png

判断程序是否已经启动

当然,我们仅仅利用了Mutex可以跨进程访问的特性,就实现了检测程序是否已经启动。

上面的代码中,需要保证一点,就是【mutexName】不能重复。最好使用一个有特色的名字,或者使用Guid来作为名字,从而避免Mutex的名字重复。进而导致判断出错。

遍历所有进程

上面使用Mutex是一种方法,还有一种方法,就是遍历全部进程,与当前的进程进行比较,如果出现了相同的进程,则说明程序已经启动。

代码如下:

9245d60ce65b9c6e02f7ab799903d697.png

遍历全部进程

这个方法的速度相对慢一点,但是对于计算机来说,那也是毫秒级的事情,我们完全感知不到。

但是这个方法不会出现重名的问题!甚至可以监测路径是否相同。

所以这个方法也有一些适用的场景。

实际效果

我们修改【Main】函数的代码:

a71de5e49de43fd2965968829c923190.png

在Main函数中加入判断逻辑

然后编译程序,先双击运行一个实例。当我们再次双击运行的时候,就会弹出提示:

1403ccbad920b723ec3b8ab18f5d74c8.png

多次运行的提示

当然,我们点击确定之后,后面的保护服务的代码,是不会执行的。从而避免一些不必要的问题。

通过以上的方法,我们就实现了限制程序只能运行一个实例的效果。

下期预告

让控制台程序转换为服务运行

敬请期待。。。

下一篇文章《正在路上。。。》,欢迎检阅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值