一是在主窗体 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 的信号量 表燃尺链示检测对应的进程号是否存在
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)