WPF整理-Mutex确保Application单例运行

简介: 原文:WPF整理-Mutex确保Application单例运行有时我们不希望我们的WPF应用程序可以同时运行有多个实例,当我们试图运行第二个实例的时候,已经运行的实例也应该弹出来。 我们可以用Mutex来实现 打开App.
原文: 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

 

目录
相关文章
|
5月前
|
XML 开发框架 .NET
|
C#
WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu)
原文:WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu)      在上一篇中我们完成了快捷工具栏的开发,本篇将讲解应用程序菜单开发的相关内容。如下图所示,点击程序窗口左上角的记事本图标(Application Button)会显示出应用程序菜单(Application Menu)列表,列表中的按键即为软件的一些基本功能。
2119 0
|
7月前
C#WPF 图片在显示时没有问题,但在运行时图片显示不出来的解决
选中项目,点击右上角的显示全部文件按钮,会将默认隐藏的文件显示出来,选中所需图片,右键,添加到项目,然后选择图片查看属性,生成操作选择resource。完毕。本人目前的解决方案。
267 41
C#WPF 图片在显示时没有问题,但在运行时图片显示不出来的解决
|
12月前
|
C#
WPF防止程序多次运行
WPF防止程序多次运行
138 0
|
Java C#
WPF防止重复运行实例
原文:WPF防止重复运行实例 1、方法一 在app.xaml.cs下添加如下代码: /// /// App.xaml 的交互逻辑 /// public partial class App : Application { System.
1157 0
|
C# C++
3DMax模型输入到WPF中运行
原文:3DMax模型输入到WPF中运行   其实看看笔者文章之前,可以在网上搜索下将3Dmax模型输入到WPF的办法,大部分结果都是这篇文章。这篇文章呢?有点麻烦,就是我们3Dmax模型转换到Blend的时候只有模型没有材质及贴图,需要在Blend3中自己添加材质贴图。
1319 0
|
C# 前端开发 Windows
WPF中的Application类。
原文:WPF中的Application类。 Application对象用的名称空间是system.windows 1、手动创建Application对象步骤。 1.1)、把项目中的App.Xaml文件从项目中排除。
1235 0
|
C#
WPF程序 双击exe自动申请“以管理员方式运行”权限
原文:WPF程序 双击exe自动申请“以管理员方式运行”权限 实现方式: 在 xxx.exe 目录下包含其对应的清单文件(xxx.exe.manifest); 用记事本打开 manifest 文件,将文件中的项:更改为:
1323 0