前言

这才第几天博客就跟不上了,看来一天一篇博客的目标还是有点大,写博客还是挺费时间的,写了不满意删,删完再写。。。直到自己没了耐心。今天先写个前言,实质性的内容明天再补吧。今天一天的收获还是挺多的,首先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程序入口在这^-^.
下面进行上面成果的演示—->

通过查找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);
}

后记

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

windows应用程序单实例的更多相关文章

  1. Qt实现应用程序单实例运行--LocalServer方式

    使Qt应用程序能够单实例运行的典型实现方法是使用共享内存实现.该方法实现简单,代码简洁. 但有一个致命缺陷:共享内存(QSharedMemory)实现的单程序运行,当运行环境是UNIX时,并且程序不幸 ...

  2. DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法

    原文:DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...

  3. C++实现程序单实例运行的两种方式

    简介 在我们编写程序的时候,经常会注意到的一个问题就是如何能够让程序只运行一个实例,确保不会让同一个程序多次运行,从而产生诸多相同进程,给我们的带来不便呢?那么常用的有以下四种方法,第一种方法是通过扫 ...

  4. c#设计应用程序单实例运行

    利用WindowsFormsApplicationBase的IsSingleInstance来控制应用程序只能单实例运行. [DllImport("user32.dll", Ent ...

  5. linux保证程序单实例运行

    static int proc_detect(const char *procname){ char filename[100] = {0}; sprintf(filename, "%s/% ...

  6. WinForm 登录窗体 + 单实例运行

    关于怎么在winform里增加登录窗体或者如何让winform程序单实例运行网上都很多例子. 然而两者结合起来呢? //Program.cs static class Program { public ...

  7. WPF:如何实现单实例的应用程序(Single Instance)

    原文:WPF:如何实现单实例的应用程序(Single Instance) 好吧,这是我将WPF与Windows Forms进行比较的系列文章的第四篇,讨论一下如何实现单实例(single instan ...

  8. 使用 WPF 创建单实例应用程序

    一个简单的例子就是大家在使用很多应用程序,例如在使用Microsoft Word 时会遇到一种情况,不管你打开多少个文档,系统一次只能加载一个winword.exe 实例.当打开新文档时,文档在新窗口 ...

  9. Windows进程单实例运行

    场景         Windows进程单实例运行,如果有进程没有退出,继续等待,直到进程完全退出,才会进入下一个实例 HANDLE pHandle = NULL; do  {  pHandle = ...

随机推荐

  1. ant design for vue 解决 vue.esm.js?c5de:628 [Vue warn]: Invalid prop: custom validator check failed for prop "defaultValue". 的错误

    错误重现: 在使用ant design for vue 的选择器插件的时候, 设置默认为为id(为数字) 报错: 解决办法: id为数字, 而defaultValue 的key 值必须为字符串, 将i ...

  2. 【转】 java类的加载和执行顺序

    1.先执行Test类的静态代码块后执行Test类的main方法,说明要执行类的方法需要先加载这个类. 2.在创建ClassB的对象时,先去加载了父类ClassA.说明加载子类时如果没有加载父类,会先加 ...

  3. 四十三、LAMP与LNMP web架构深度优化实战-第二部

    1. 配置nginx gzip压缩功能    服务器对发出的内容进行压缩,带宽少了,体验好,速度快,但是服务端压,会使cpu使用高,压缩比高的进行压缩:文本.程序文件.数据文件.图片视频不要压缩,一般 ...

  4. Gym 101987K TV Show Game(2-SAT)

    题目链接:https://vj.z180.cn/b4aacc08fc7aab6ce14e7baf13816c24?v=1571542994 题目要求n个灯(R,B),给出m组赋值方式,每一组中至少有两 ...

  5. js获取前n天或后n天的天数

    1获取n天后的某天的日期 <!DOCTYPE html> js获取前n天或者后n天的天数 </style> <body > <h1 id="date ...

  6. Java字符串替换函数replace、replaceFirst、replaceAll

    一.replace(String old,String new) 功能:将字符串中的所有old子字符串替换成new字符串 示例 String s="Hollow world!"; ...

  7. Java复习(一)——Java语言概述、开发环境、基础知识

    设计模式:在各种应用系统中被大量应用,是设计的“常用套路” 作为Java WEB开发人员,需要掌握HTML/CSS/JS和数据库相关知识 常用的应用程序框架:Spring MVC,Spring Boo ...

  8. [LC] 322. Coin Change

    You are given coins of different denominations and a total amount of money amount. Write a function ...

  9. django框架进阶-CSRF认证

    ############################################### """ django中csrf的实现机制 #第一步:django第一次响应 ...

  10. 01-Java 教程

    一.我的第一个 java 程序 创建文件 HelloWorld.java(文件名需与类名一致), 代码如下: public class HelloWorld { public static void ...