zoukankan      html  css  js  c++  java
  • windows应用程序单实例

    每日一句

    前言

    这才第几天博客就跟不上了,看来一天一篇博客的目标还是有点大,写博客还是挺费时间的,写了不满意删,删完再写。。。直到自己没了耐心。今天先写个前言,实质性的内容明天再补吧。今天一天的收获还是挺多的,首先windows下单例程序的实现方式,这篇文章最主要介绍一个进程间通信的方式。当然其他方法也需要介绍。还有编程中的敏捷开发,这个内容现在是大体上了解了,还有待深挖,学会后应用到自身上试试。敏捷开发这部分内容等以后在专门出一篇自己的理解吧,网上这方面的内容还是挺多的。说实在的今天博客没有完成主要是因为花好多时间去搭建这个博客,为了好看加简单特效,换背景。现在还是停难看的。。。接下来每天中午应该多思考思考今天学到了什么,而不是去玩游戏了,不然每天都感觉没有写上的。

    首先我们需要理解一个知识点。

    当我们两次运行一个程序时(windows桌面下点击同一个应用),它是两个进程,它们两个之间是作用相同但是毫无关系的。我们

    利用mutex实现进程的单例

    要使用mutex我们首先需要知道mutex是进程间通信的一个方式,它是存在于操作系统中的。因此两个进程间是可以通过mutex来进行简单的通信。

    下面进行详细的介绍。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public partial class : Application
    {
    private System.Threading.Mutex mutex;
    public ()
    {
    //3.注册startup事件。
    this.Startup += AppStartUp;
    }
    大专栏  windows应用程序单实例ass="line">
    //2. 检测程序。
    void AppStartUp(object sender, StartupEventArgs e)
    {
    bool ret;
    mutex = new System.Threading.Mutex(true,"test",out ret);
    if (!ret) //当ret == false 时说明已有一个程序运行起来了。毕竟操作系统只能拥有一个叫"test"的mutex ^-^ !
    {
    MessageBox.Show("嘿嘿我已经运行起来了 ^-^ !!!");
    Environment.Exit(0);
    }
    }
    }

    这个方法必须保证mutex不被回收,否则就mutex就会新建成功,这样就无法发挥作用了 - ^v^ -!
    这个代码写在App.xaml.cs中就好~,毕竟wpf程序入口在这^-^.
    下面进行上面成果的演示—->
    single

    通过查找process

    第二种方法是根据程序的程序名来进行查找同名的程序,若找到的程序数大于1说明有旧的同名程序。(这种方式几乎不用^-^)!
    下面给出代码,代码位置和上面第一种方式的一样,写在AppStartUp中就好 –。

    1
    2
    3
    4
    5
    6
    7
    int processCount = Process.GetProcessesByName("SinglePattem")
    .Where(o => o.Id != Process.GetCurrentProcess().Id).Count();
    if (processCount > 1)
    {
    MessageBox.Show("哈哈,我又被运行了");
    Environment.Exit(0);
    }

    后记

    还有一种我觉的可以常用的方式,就是前言里提到的使用进程间通信方式命名管道。本来想写在这一篇文章中的,但是这样就会使这篇文章内容太多,以后回来看也会不方便,所以呢剩下的那一种利用管道的方法放在下一篇文章中介绍。

  • 相关阅读:
    JDK 14的新特性:更加好用的NullPointerExceptions
    技术回顾系列:最新最热门的技术大事-第一周
    JDK 14的新特性:instanceof模式匹配
    JDK 15 JAVA 15的新特性展望
    怎么break java8 stream的foreach
    java 8 stream中的Spliterator简介
    怎么在java中创建一个自定义的collector
    java 8 stream reduce详解和误区
    java stream中Collectors的用法
    java关于throw Exception的一个小秘密
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12302426.html
Copyright © 2011-2022 走看看