• 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

  • 相关阅读:
    3.14周末作业
    3.13作业
    文件处理
    字符编码
    基本数据类型总结
    基本数据类型--------------------集合set()
    python入门009
    作业009
    python入门008
    作业008
  • 原文地址:https://www.cnblogs.com/DebugLZQ/p/3160919.html
Copyright © 2020-2023  润新知