使用mutex实现应用程序单实例运行代码分享

System.Threading.Mutex :同步基元,它只向一个线程授予对共享资源的独占访问权。
实现原理: 在程序启动时,请求一个互斥体,如果能获取对指定互斥的访问权,就继续运行程序,否则就退出程序。
测试代码:


代码如下:

class Test
     {
         /// <summary>
         /// 应用程序的主入口点。
         /// </summary>
          [STAThread]
         static void Main(string[] args)
         {
              bool flag=false;
              System.Threading.Mutex mutex=new System.Threading.Mutex(true,"Test",out flag);
              //第一个参数:true--给调用线程赋予互斥体的初始所属权
              //第一个参数:互斥体的名称
              //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true
              if(flag)
              {
                   Console.Write("Running");
              }
              else
              {
                   Console.Write("Another is Running");
                   System.Threading.Thread.Sleep(5000);//线程挂起5秒钟
                   Environment.Exit(1);//退出程序
              }
              Console.ReadLine();
         }

运行结果:
第一次运行,输出"Running"。
不关闭第一次运行的程序, 进行第二次运行,输出"Another is Running",五秒钟后,程序自动退出。

(0)

相关推荐

  • 使用mutex实现应用程序单实例运行代码分享

    System.Threading.Mutex :同步基元,它只向一个线程授予对共享资源的独占访问权.实现原理: 在程序启动时,请求一个互斥体,如果能获取对指定互斥的访问权,就继续运行程序,否则就退出程序.测试代码: 复制代码 代码如下: class Test     {         /// <summary>         /// 应用程序的主入口点.         /// </summary>          [STAThread]         static voi

  • C#使用Mutex简单实现程序单实例运行的方法

    本文实例讲述了C#使用Mutex简单实现程序单实例运行的方法.分享给大家供大家参考.具体如下: [STAThread] static void Main() { bool isAppRunning = false; System.Threading.Mutex mutex = new System.Threading.Mutex(true,System.Diagnostics.Process.GetCurrentProcess().ProcessName,out isAppRunning); i

  • Java程序单实例运行的简单实现

    目录 需求 实现方式 代码实现 第一种实现(端口控制) 第二种实现(文件锁) 第三种方式(端口+文件锁) 需求 最近做了个java项目,功能完成后打包安装了,发现可以点开多个实例,因为桌面显示托盘,所以点一次就会出现一个托盘,并且系统也多了好几个javaw进程,这样的话就不能保证程序的健壮性了,所以需要做一个判断让程序只运行一个实例. 实现方式 Java没有提供这样的机制.从操作系统的观点来看,一个启动的Java Application仅仅是一个JVM的运行实例.运行相同Application的

  • Perl中使用File::Lockfile确保脚本单实例运行

    用Perl写了一些监控脚本,放在crontab中调度执行.有时候会发现一个脚本运行时间过长,会同时跑起多个实例,因此有必要为脚本加上控制,只运行一个实例. 最简单自然的想法,在脚本中检查并创建一个空的lock文件,脚本结束时再删除.通过判断文件是否存在的方式来判断脚本是否已经运行.不过这样做有个bug,如果脚本运行过程中异常终止,lock文件没有正常删除,就会导致脚本无法再运行. 空的lock文件不行,那么考虑在lock文件中加入一点内容,比如进程的PID号,然后通过检查该PID号的进程是否还在

  • Wmic 实例应用代码分享

    至于别名,就是给主板.服务.系统.进程啦这些和计算机相关的东东起了个英文名,在wmic.exe /?命令行下也可以看到wql语句和我们平常用的注入时的sql语句的语法几乎是一模一样,甚至更简单.一般是where name="xxx" and 之类的,不过有时候要把name="xxx"这样的格式换成"name='xxx'"或者是where(name='xxx')这样,反正正常情况下不行的话就换个写法.动词呢,就那么简单几个assoc.call.CR

  • C#实现关闭其他程序窗口或进程代码分享

    在进行winform开发过程中有时候会需要关闭其他程序或者关闭进程,以前写过一篇相关介绍的文章,今天有同事问起来,于是在次翻出来和大家分享一下. 下面介绍我所知的两种方法,应该对大家有帮助,如果有朋友知道其他的方法,谢谢共享一下. 方法1 ProcName 需要关闭的进程名称 private bool closeProc(string ProcName) { bool result = false; System.Collections.ArrayList procList = new Syst

  • 应用程序操作NorFlash示例代码分享(norflash接口使用方法)

    复制代码 代码如下: int dealwithnor(){ //    glob_t mtdbuf;    struct mtd_info_user mtd;    struct erase_info_user erase;    int blocks = 0;    int i = 0;  //用于控制擦除的块的个数    int k = 0;    int written = 0;  //已写入的字节数,只初始化一次    unsigned int size = StateOfImage.s

  • 解决C#程序只允许运行一个实例的几种方法详解

    本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运行.要实现程序的互斥,通常有下面几种方式,下面用 C# 语言来实现:方法一:使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例.把program.cs文件里的Main()函数改为如下代码: 复制代码 代码如下: using System;using System.Windows.Forms;using System.Runtime.InteropServices;namespace NetTools{    static cl

  • C#实现托盘程序并禁止多个应用实例运行的方法

    本文实例讲述了C#实现托盘程序并禁止多个应用实例运行的方法.分享给大家供大家参考,具体如下: 托盘程序的制作: 1.把NotifyIcon控件拉一个到窗体上,并设置NotifyIcon的Icon(很重要!否则运行后看不到效果) 2.窗体关闭时,将程序最小化到系统托盘上 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //MessageBox.Show("程序将最小化到系统托盘区"); e.C

  • python 同时运行多个程序的实例

    start many programs execfile('C:/Dokumente und Einstellungen/schnei17/Desktop/python/zeit/1.py') print 1 execfile('C:/Dokumente und Einstellungen/schnei17/Desktop/python/zeit/2.py') print 2 以上这篇python 同时运行多个程序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们

随机推荐