有时咱们不但愿咱们的WPF应用程序能够同时运行有多个实例,当咱们试图运行第二个实例的时候,已经运行的实例也应该弹出来。html
咱们能够用Mutex来实现ide
打开App.xaml.cs,在App类中添加以下内容post
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能够防止同一个进程运行两次url
Update:扩展参考:Process and Assemblyspa