c# WinFo判断当前程序是否已经启动或存在的几种方式

第一种方式:利用Mutex互斥量实现同时只有一个进程实例在运行

 static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
 static void Main()
        {
            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //控制当前程序已经打开(即启动)
            //方式1:利用Mutex互斥量实现同时只有一个进程实例在运行
            //互斥锁(Mutex)
            //互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。 
            //互斥锁可适用于一个共享资源每次只能被一个线程访问的情况
            bool flag = false;
            System.Threading.Mutex hMutex = new System.Threading.Mutex(true, Application.ProductName, out flag);
            bool b = hMutex.WaitOne(0, false);
            /*上面的参数说明:
             第一个参数【initiallyOwned】:true:指示调用线程是否应具有互斥体的初始所有权 (老实说没理解透)
             第二个参数【name】:程序唯一name,(当前操作系统中)判定重复运行的标志 
             第三个参数【createdNew】:返回值,如果检测到已经启动则返回(false)。 
             */
            if (flag)
            {
                //没有启动相同的程序
                Application.Run(new MainForm());
            }
            else
            {
                MessageBox.Show("当前程序已在运行,请勿重复运行。");
                Environment.Exit(1);//退出程序  
            } 
        }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构沉思录

Spring中获取Request的方法及线程安全性分析

作者:编程迷思(Java架构沉思录做了部分修改与注释,著作权归原作者所有) 原文:https://www.cnblogs.com/kismetv/p/87572...

1715
来自专栏阿杜的世界

Spring Boot:定制HTTP消息转换器

在构建RESTful数据服务过程中,我们定义了controller、repositories,并用一些注解修饰它们,但是到现在为止我们还没执行过对象的转换——将...

972
来自专栏精讲JAVA

OutOfMemoryError异常系列之Java堆溢出

OOM异常是一种很常见的错误,但是更多的程序员对其更多的是一种迷惑,今天我就在这给大家讲讲OOM的几种情景。 Java堆溢出。 虚拟机栈和本地方法栈溢出。 方...

1905
来自专栏java一日一条

Java管理扩展指南之MBean简介

MBean是一个被管理的Java对象,就像Javabean组件一样,但是它遵从JMX规范的设计模式。MBean可以表示设备、应用或者任何需要被管理的资源。MBe...

1131
来自专栏JavaNew

Java 并发编程:volatile的使用及其原理

1145
来自专栏desperate633

第8课 使用函数文本处理函数日期和时间处理函数数值处理函数

![Uploading Paste_Image_201295.png . . .]# 文本处理函数

753
来自专栏javathings

Spring 中条件注解的作用

@Conditional 是 Spring 4.0 提供的新注解。条件注解,顾名思义就是根据不同的条件加载不同的 Bean 到容器中。条件是写在一个接口实现类中...

1574
来自专栏Java后端技术栈

Spring中获取Request的几种方法及其线程安全性分析

本文将介绍在Spring MVC开发的Web系统中,获取request对象的几种方法,并讨论其线程安全性。

781
来自专栏青玉伏案

ReactiveSwift源码解析(十一) Atomic的代码实现以及其中的Defer延迟、Posix互斥锁、递归锁

本篇博客我们来聊一下ReactiveSwift中的原子性操作,在此内容上我们简单的聊一下Posix互斥锁以及递归锁的概念以及使用场景。然后再聊一下Atomic的...

3595
来自专栏猿天地

spring-data-mongodb之MongoTemplate 添加数据

来源:猿天地 链接:http://cxytiandi.com/blog/detail/1733 今天我们来学习下MongoTemplate的添加数据操作,大神请...

4239

扫码关注云+社区