C#多线程开发9:使用Mutex类禁止应用程序启动两次

使用Mutex类可以创建有名称的互斥,而系统可以识别有名称的互斥,因此可以使用Mutex类禁止应用程序启动两次。

下面是此种场景的演示代码。

using System;
using System.Threading;
namespace Run1InstanceExample
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            bool createdNew;
            var mutex = new Mutex(false, "SingletonApp", out createdNew);
            if (!createdNew)
            {
                return;
            }
            else
            {
                Console.WriteLine("Good job!");
                Console.ReadLine();
            }
        }
    }
}

代码中使用具有3个参数的Mutex构造函数创建互斥对象。

第1个参数指定互斥是否最初应由主调线程拥有;

第2个参数定义互斥的名称;

第3个参数为输出参数,接收一个表示互斥是否为新建的布尔值。如果返回false,就表示互斥已经被定义,则说明创建该互斥的应用程序已经启动,无法再启动该应用程序,否则启动应用程序。

时间: 2024-10-12 07:52:12

C#多线程开发9:使用Mutex类禁止应用程序启动两次的相关文章

QSplashScreen类实现Qt程序启动画面

QSplashScreen类实现Qt程序启动画面 收藏人:zwsj     2013-09-13 | 阅:569  转:6    |   来源   |  分享      程序启动画面一般用于显示软件信息(名称.作者.版权等)以及减少程序加载过程中的枯燥感. 在Qt中,可以通过QSplashScreen类来为应用程序添加一个启动画面,它会在应用程序的主窗口出现前显示一个图片,并且可以在图片上显示想要输出的信息. 下面是一个简单的例子: [cpp] view plaincopy #include <

IOS开发——UI进阶篇(七)程序启动原理

一.Info.plist常见的设置 1.建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 在旧版本Xcode创建的工程中,这个配置文件的名字就叫“Info.plist” 项目中其他Plist文件不能带有“Info”这个字眼,不然会被错认为是传说中非常重要的“Info.plist” 项目中还有一个InfoPlist.strings的文件,跟Info.plist文件的本地化相关 2.常见属性

iOS开发实践:一个类微博客户端从启动到与用户交互的过程

本文基于数据字典和数据流图两种工具讲述一个完整微博客户端的实现.数据字典和数据流图都可以用来表达线程的执行流程,同时定义了需要的类,是进一步设计类的基础. 数据字典实际上是一张表,表的第一个字段是程序代码中的标识符,其它字段具体描述它在线程中被如何使用,以及它所依赖的其它元素,数据字典中各个标识符基本上也是按照线程的执行流程来排序. 数据流图是一个平面拓扑结构,每个节点或者是外部数据,或者是可被线程执行的代码模块.从外部数据到代码模块的边意味着线程在执行代码模块的时候需要用到外部数据,从代码模块

C#多线程开发8:线程同步之Mutex类

以下代码模拟"从自动取款机中取钱"的操作:当账户余额大于等于1000时,取出1000放入口袋.代码中使用两个线程同时执行取钱操作,若不进行同步处理,可能会存在两个线程同时进入取钱逻辑,导致最终取出2000的错误结果.所以代码中使用Mutex类同步线程访问取钱逻辑(临界资源). using System; using System.Threading; namespace MutexExample { class Program { private static Mutex mutex

C#使用Monitor类、Lock和Mutex类进行多线程同步

在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁,好在Framework中已经为我们提供了三个加锁的机制,分别是Monitor类.Lock关键字和Mutex类. 其中Lock关键词用法比较简单,Monitor类和Lock的用法差不多.这两个都是锁定数据或是锁定被调用的函数.而Mutex则多用于锁定多线程间的同步调用.简单的说,Monitor和Loc

IOS开发-多线程开发之线程安全篇

前言:一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源,比如多个线程访问同一个对象.同一个变量.同一个文件和同一个方法等.因此当多个线程访问同一块资源时,很容易会发生数据错误及数据不安全等问题.因此要避免这些问题,我们需要使用“线程锁”来实现. 本文主要论述IOS创建锁的方法(总结): 一.使用关键字 1)@synchronized(互斥锁) 优点:使用@synchronized关键字可以很方便地创建锁对象,而且不用显式的创建锁对象. 缺点:会隐式添加一个异常处理来保护代码,该异

.NET基础拾遗(5)多线程开发基础

Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 一.多线程编程的基本概念 下面的一些基本概念可能和.NET的联系并不大,但对于掌握.NET中的多线程开发来说却十分重要.我们在开始尝试多线程开发前,应该对这些基础知识有所掌握,并且能够在操作系统层面理解多线程的运行方式. 1.1 操作系统层面的进程和线程 (1)进程 进程代表了操作系统上运行着的一个应用程序.进程拥有自己的程序块

Java线程安全与多线程开发

互联网上充斥着对Java多线程编程的介绍,每篇文章都从不同的角度介绍并总结了该领域的内容.但大部分文章都没有说明多线程的实现本质,没能让开发者真正"过瘾". 从Java的线程安全鼻祖内置锁介绍开始,让你了解内置锁的实现逻辑和原理以及引发的性能问题,接着说明了Java多线程编程中锁的存在是为了保障共享变量的线程安全使用.下面让我们进入正题. 以下内容如无特殊说明均指代Java环境. 第一部分:锁 提到并发编程,大多数Java工程师的第一反应都是synchronized关键字.这是Java

Java之多线程开发时多条件Condition接口的使用

转:http://blog.csdn.net/a352193394/article/details/39454157 我们在多线程开发中,可能会出现这种情况.就是一个线程需要另外一个线程满足某某条件才能继续运行,或者需 要其他线程满足好几个条件才能运行,对于这样的多条件的多线程并发,我们如何控制好各个线程之间的关系,使他们 能很好的处理冲突不至于相互出现问题呢,下面我们来介绍一下Java提供的Condition这个接口,这个接口很好的实现了 这种需求. 对于这个问题最经典的例子就是生产者消费者模