原文:WPF:如何实现单实例的应用程序(Single Instance) 好吧,这是我将WPF与Windows Forms进行比较的系列文章的第四篇,讨论一下如何实现单实例(single instance) 先来看第一种最简单粗暴的做法: 检测进程名,如果名称一样,则表示程序已经启动了,就不再启动. protected override void OnStartup(StartupEventArgs e) { // Get Reference to the current Process Pro…
一个简单的例子就是大家在使用很多应用程序,例如在使用Microsoft Word 时会遇到一种情况,不管你打开多少个文档,系统一次只能加载一个winword.exe 实例.当打开新文档时,文档在新窗口显示,但是始终只有一个应用程序控制所有文档窗口:如:可以提供平铺当前所有文档中相邻窗口的文档的特性. 对于创建单实例的应用程序,WPF本身没有提供自带的解决方法,但可以通过变通的方式来实现——思路是当触发ApplicationStartup事件时,检查另一个实例是否在运行.方法是通过使用全局的mut…
最近有同事问道在应用程序启动之后,再次双击应用程序,如何保证不再启动新的应用程序,而是弹出之前已经启动的进程,本质上这就是创建一个单实例的WPF应用程序.在VS的工程树中有一个App.xaml和App.xaml.cs(这两个文件都是VS自动生成的),在App.xaml.cs中定义了App类,该类继承自System.Windows.Application,从类的命名上也很容易看出这些类是跟应用程序的管理相关的,在讲创建单实例应用程序之前,我们先了解一下Application这个类. 在上一篇WPF…
单实例模式 当程序中需要同一个实例就可以解决问题的场景,可以使用单实例模式…
例如:Microsoft Word,不管打开多少个文档(也不管它们是如何打开的),一次只能加载 winword.exe 一个实例. 这便是单实例应用程序. 对于这种单实例应用程序,WPF 本身并未提供解决方法,但是可以使用几种变通的方法.基本的技术是当触发 Application.StartUp 事件时,检查另一个应用程序是否正在运行.最简单的方法是使用一个全局的 mutex 对象(mutex对象是操作系统提供的一个用于进程之间通信的同步对象).这种方法很简单但是功能有限——最重要的是,应用程序…
vs2019 1.引入名称空间 using System.Threading; using System.Runtime.InteropServices; 2.导入dll并声明方法 [DllImport("User32", CharSet = CharSet.Unicode)] static extern IntPtr FindWindowW(string lpClassName, string lpWindowName); [DllImport("User32",…
在我们经常使用的软件中,当我们已经打开后,再次打开时,有的软件不会出现两个.例如有道词典,会将上次的界面显示出来,或者提示我们“该程序已经运行...”.我通过一个简单的C# WPF例子来说明. 首先我们要了解一下线程中的互斥体(Mutex),引用MSDN官方文档解释,这是一个同步基元,可以用于进程间同步.请参考下面的代码: public App() { bool isNewInstance; string appName = System.Reflection.Assembly.GetExecu…
前言 这才第几天博客就跟不上了,看来一天一篇博客的目标还是有点大,写博客还是挺费时间的,写了不满意删,删完再写...直到自己没了耐心.今天先写个前言,实质性的内容明天再补吧.今天一天的收获还是挺多的,首先windows下单例程序的实现方式,这篇文章最主要介绍一个进程间通信的方式.当然其他方法也需要介绍.还有编程中的敏捷开发,这个内容现在是大体上了解了,还有待深挖,学会后应用到自身上试试.敏捷开发这部分内容等以后在专门出一篇自己的理解吧,网上这方面的内容还是挺多的.说实在的今天博客没有完成主要是因…
WPF设置单实例启动 使用Mutex设置单实例启动 using System; using System.Threading; using System.Windows; namespace Test02 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { In…
使Qt应用程序能够单实例运行的典型实现方法是使用共享内存实现.该方法实现简单,代码简洁. 但有一个致命缺陷:共享内存(QSharedMemory)实现的单程序运行,当运行环境是UNIX时,并且程序不幸崩溃,会导致共享内存无法释放,从而无法重新运行程序! 所以应该寻找其他的使Qt应用程序能够单实例运行的方案.于是找到LocalSocket和LocalServer通讯方案(据说Qt官方商业版的QSingleApplication的原理好像跟这个差不多). “要用到Qt的QLocalSocket,QL…