很多程序没有必要同时运行多个,比如下载程序,这就需要限制,如果程序已经运行,则再运行时给予提示并不再继续运行新的。
这里给出一个网上流行的但不正确的,但又在这里被修正了的方法。
对 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 对资源的保护功能,而是用它是否成功创建互斥体功能。