WPF finishing - Mutex ensures Application singleton runs

4551 단어 application
Sometimes we don't want our WPF application to have multiple instances running at the same time, and when we try to run the second instance, the already running instance should also pop up.
We can use Mutex to achieve
Open App.xaml.cs and add the following to the App class

    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);
            }
        }
    }
 
The WPF implementation is slightly different from WinForm, please refer to the previous blog post of DebugLZQ: Using the kernel object Mutex prevents the same process from running twice
Update: Extended reference: Process and Assembly

좋은 웹페이지 즐겨찾기