使用互斥量保持wpf程序唯一实例运行
public void CheckSingleInstanceAndStartMainApp(){
bool singleInstance = false;
System.Threading.Mutex singleInstanceMutex = new System.Threading.Mutex(true, "singleInstance", out singleInstance);
if (!singleInstance) {
//程序已经运行直接return
return ;
}
//启动程序
(new MainApp).Start();
//保持互斥量不被垃圾回收器回收
GC.KeepAlive(singleInstance);
}
在程序已经运行情况下,如何激活程序并置顶,通过API: SetForegroundWindow + ShowWindow + FindWindow
public void ActiveAndShowToFront(string titleName) {
//s1:通过WAPi:FindWindow获取运行实例的句柄
//或者事先保存实例,传递过来
IntPtr hWndPtr = FindWindow(null, titleName);
//s2;显示窗体
ShowWindow(hWndPtr);