怎么让C#程序同时只能运行一个实例

怎么让C#程序同时只能运行一个实例,第1张

两种方法。

一是在主窗体 Load 时检测当前进程,如果存在两个或两个以上当前实例的进程,则结束自身。这种方法好处是可以自定义个提示什么的,比如d出个警告“程序已经运行”之类的;缺明模点时每次运行前都会遍历一遍进程,比较卡。

二修改 Program.cs,引用 Microsoft.VisualBasic 并引入命名空间 Microsoft.VisualBasic.ApplicationServices,使 Program 类继承 WindowsFormsApplicationBase。

在 Program 的构造函数类加一句:this.IsSingleInstance = true就是单实例化模式了。这种办法不能自定义提示,且是猛穗在主窗体载入前就已经完成检测的,检测到有两个实例的进程系统会自动结束后启动的。

【补充】yezhiwe5633 的回答枝槐卜用了互斥锁,优点很明显,比较简单;缺点也同样明显,因为互斥锁是全局的,所以如果同一台电脑上有多个帐户,那么只要有一个账号运行了就会导致其他用户无法运行;另一个缺点是 .NET 不会自己回收 Mutex,如果程序被非法终止(比如遇到错误抛出了,或者被进程杀死了),那么上一个 Mutex 没被释放,新启动的程序将始终处于死锁状态。

 windows下一般创建一个核心对象 启动时 先检查是否已经有同名的核心对象存在 如存在皮孙 则认为进程已经起来了

linux下一般启动后 会将当前的pid写入一个.pid文件里 然后下次启动的时候

给.pid文件里的进程号发一困差个kill -0 的信号量 表燃尺链示检测对应的进程号是否存在


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12226299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存