架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13659|回复: 3

[资料] C# 程序只允许运行一个实例的正确代码

[复制链接]
发表于 2016-12-10 14:55:50 | 显示全部楼层 |阅读模式
QQ截图20161210145046.jpg

我写了一个流量监控的软件,想让电脑只能运行一次这个程序,代码如下:



发现,立即,点击软件,会提示“已经运行了一个实例了”,可是,等了30秒之后,然后,再点击软件,竟然,又成功运行了一次!!!

很可惜,上段代码DEBUG模式下没问题,在RELEASE却没有成功,
问题原因是Mutex被声明为一个局部变量,在relese模式下由于优化问题,可能由于编译器认为Mutex不再被

使用,被回收了,本人测试过,

把Mutex放在最上面,设置成静态变量,即可!!!!正确的代码如下:





评分

参与人数 1MB +1 贡献 +1 收起 理由
爱学习的小小白 + 1 + 1 赞一个!

查看全部评分





上一篇:C#只允许运行应用程序的一个实例的正确写法
下一篇:C#设置软件开机自动运行的方法(修改注册表)
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-12-10 15:02:58 | 显示全部楼层
静态字段不会被GC回收,静态字段 分配在Loader heap 中,非 GC heap,不受GC控制。

(无论是否静态类的)静态成员,只有到AppDomain.UnLoad时才会回收。静态类只允许存在静态成员
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-12-6 11:48:05 | 显示全部楼层
学习了,感谢楼主分享
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2018-2-23 14:59:01 | 显示全部楼层
其他实现方式:

启动方式:



码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-26 18:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表