专栏首页kwcodec# WinFo判断当前程序是否已经启动或存在的几种方式

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 条评论
登录 后参与评论

相关文章

  • 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序

    System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。

    纯粹是糖
  • System.Runtime.InteropServices.COMException (0x800A03EC): 无法访问文件

    System.Runtime.InteropServices.COMException (0x800A03EC): 无法访问文件。请尝试下列方法之一:

    纯粹是糖
  • setInterval做定时器

    <script src="/js/jquery-1.8.3.min.js"></script> <script> $(f...

    纯粹是糖
  • muduo网络库学习之BlockinngQueue<T>类、ThreadPool 类、Singleton类封装中的知识点

    一、BlockinngQueue<T>类、BoundedBlockingQueue<T>类 生产者消费者问题,可以用信号量+互斥锁 或者 条件变量+互斥锁 来解...

    s1mba
  • Vuex 映射完全指南

    Vuex 是一把双刃剑。如果使用得当,Vue 可以使你的工作更加轻松。如果不小心,也会使让的代码混乱不堪。

    疯狂的技术宅
  • 百度搜索资源平台(站长工具)抓取频次归零的解决过程

    有朋友找老魏说自己网站的百度抓取频次归零了,自己对网站的操作没有变化,不知道百度这次为什么这么对待自己。魏艾斯博客也是第一次见到这种情形,琢磨了一下找到思路并开...

    魏艾斯博客www.vpsss.net
  • python列表生成器与生成器

    生成器与列表生成器的本质区别就是:一个已经生成数据了,使用时,如果数据过大,会产生内存溢出,而生成器是只有循环时,才会生成数据。

    py3study
  • 我的写作工具链

    写作是技术输出的重要手段。自己也写了一年多的文章,累计也超过五万多字。今天就想谈谈自己对于写作的一些看法以及写作时使用到的工具。工欲善其事必先利其器。

    用户2060079
  • 锁的使用场景主要涉及到哪些?读写锁为什么会比普通锁快【Golang 入门系列十六】

    前面已经讲过很多Golang系列知识,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/...

    架构师精进
  • 从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?

    说到依赖注入,做 Android 的人都会想到一个库:Dagger;说到 Dagger,大家的反应普遍是一套三连:牛逼、高端、我才不用。

    扔物线

扫码关注云+社区

领取腾讯云代金券