同一 C# 桌面程序只运行一个

很多程序没有必要同时运行多个,比如下载程序,这就需要限制,如果程序已经运行,则再运行时给予提示并不再继续运行新的。

这里给出一个网上流行的但不正确的,但又在这里被修正了的方法。

对 Program.cs

核心是把 Mutex 设置为 static,网上有些程序没有那样设置,经测试是无法保证程序只运行一个的。

说一下 Mutex

Mutex 是一个互斥体,大多用于多线程访问同一资源时,保障资源的安全,有点像数据库中的锁。假如一个数是 m = 1,线程 1 是循环 100 个 m++,线程 2 是循环 100 个 m *= 2。如果线程 1 执行的时候,线程 2 进来搅合,结果就不一样了。这就需要 Mutex 保障线程 1 用完 m 后,线程 2 再进行计算。

说一下 Mutex 的三个参数

第一个参数为 false 表示创建 Mutex 后,当前线程并没有获得互斥体的所有权。如果拥有所有权,不用资源后,要用 ReleaseMutex 释放所有权。

第二个参数为互斥体名称。

第三个参数是返回值,表示是否创建了互斥体,如果第二个参数对应的互斥体已经存在,则返回 false。

总之

本文实际没有用 Mutex 对资源的保护功能,而是用它是否成功创建互斥体功能。

你可能感兴趣的