WPF整理-Mutex确保Application单例运行
有时我们不希望我们的WPF应用程序可以同时运行有多个实例,当我们试图运行第二个实例的时候,已经运行的实例也应该弹出来。
我们可以用Mutex来实现
打开App.xaml.cs,在App类中添加如下内容
public partial class App : Application
{
[DllImport("user32", CharSet = CharSet.Unicode)]
static extern IntPtr FindWindow(string cls, string win);
[DllImport("user32")]
static extern IntPtr SetForegroundWindow(IntPtr hWnd);
[DllImport("user32")]
static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32")]
static extern bool OpenIcon(IntPtr hWnd); protected override void OnStartup(StartupEventArgs e)
{
bool isNew;
var mutex = new Mutex(true, "My Singleton Instance", out isNew);
if (!isNew)
{
ActivateOtherWindow();
Shutdown();
}
}
private static void ActivateOtherWindow()
{
var other = FindWindow(null, "MainWindow");
if (other != IntPtr.Zero)
{
SetForegroundWindow(other);
if (IsIconic(other))
OpenIcon(other);
}
}
}
WPF实现和WinForm略有区别,请参考DebugLZQ前面的博文:使用内核对象Mutex可以防止同一个进程运行两次
Update:扩展参考:Process and Assembly
WPF整理-Mutex确保Application单例运行的更多相关文章
- DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法
原文:DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...
- Kotlin入门(28)Application单例化
Application是Android的又一大组件,在App运行过程中,有且仅有一个Application对象贯穿应用的整个生命周期,所以适合在Application中保存应用运行时的全局变量.而开展 ...
- Python守护进程和脚本单例运行
Python 守护进程 守护进程简介 进程运行有时候需要脱离当前运行环境,尤其是Linux和Unix环境中需要脱离Terminal运行,这个时候就要用到守护进程.守护进程可以脱离当前环境要素来执行,这 ...
- Python实例浅谈之五Python守护进程和脚本单例运行
一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...
- (临时)C#中,exe 单例运行
Mutex mutex = new Mutex(false, ""); , false)) { MessageBox.Show("程序已经启动"); retur ...
- WPF手写代码配置文件——单例
public class SettingHelper { //WPF下配置文件路径 public static readonly string SettingFilePath = AppDomain. ...
- Inno Setup安装程序单例运行
1.源起: KV项目下载底层升级包,老是报出升级文件占用问题,反复分析,不得其所. 今天突然发现同时启动多个升级程序实例,分析认为安装包同时被调用多次,引发实例访问文件冲突,导致此问题. 安装程序由I ...
- TypeScript设计模式之单例、建造者、原型
看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 单例模式 Singleton 特点:在程序的生命周期内只有一个全局的实例,并且不能再new出新的实例. 用处:在一些只需要一个对象存在 ...
- C#应用程序单例并激活程序的窗口 使其显示在最前端
public class SoftHelper { ///<summary> /// 该函数设置由不同线程产生的窗口的显示状态 /// </summary> /// <p ...
随机推荐
- 添加OSG各种事件处理器
// add the state manipulator viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera ...
- CentOS7 安装中文帮助手册
1.首先确定系统安装中文字体否 locale 2.rpm安装中文帮助手册 挂在光盘 将man-pages-zh-CN-1.5.2-4.el7.noarch.rpm拷贝到本机 rpm -ivh man- ...
- Jquery判断变量是否为空
var aaa=''; if(aaa) { //aaa不为空也不是不可识别对象时执行 } else { //aaa为空或不可识别时执行 } aaa必须是变量,对象的属性好像是不行,
- Mac下的类似apt-get的包管理工具Homebrew(笔记)
对于一个习惯了在 Ubuntu 的终端上通过 apt-get 来安装工具软件的我来说,也希望在Mac上找到类似的工具,能很方便的一条命令就能安装所需的软件,而不用手工的去查找下载编译,或者是折腾安装所 ...
- iTerm 2 && Oh My Zsh
一年前,在搞终端的时候偶然一次机会,让我看到了各种强大的DIY界面,这让我很想去自己搞一个.于是在网上不断的寻找资源,也请教了大多数朋友.最终以失败告终.最近,本人又突然想起当时这件事,于是,决定边做 ...
- 1.Linux中安装LNMP过程
第一步安装mysql过程 安装包mysql-5.0.22.tar.gz,解压tar -zxvf mysql-5.0.22.tar.gz cd mysql-5.0.22 进行源码安装./configu ...
- <转>Unity3D研究院之C#使用Socket与HTTP连接服务器传输数据包
最近项目中需要使用HTTP与Socket,把自己这段时间学习的资料整理一下.有关Socket与HTTP的基础知识MOMO就不赘述拉,不懂得朋友自己谷歌吧.我们项目的需求是在登录的时候使用HTTP请求, ...
- 2016 Multi-University Training Contest 1 G. Rigid Frameworks
Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- Visual Studio 常用快捷键
作为一个使用VisualStudio的程序员,使用快捷键会为你的开发提供助力. 下附个人开发过程中感觉比较实用的快捷键: 开始运行"devenv",启动相应版本的VisualStu ...
- SSDB 主从配置
环境 Master/Slave 系统 IP SSDB版本 Master CentOS6.7 10.10.3.211 ssdb-1.8.0 Sla ...