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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步