1
我有一個wpf應用程序,我必須讓應用程序只運行一次。一臺機器上不應該有多個實例。防止應用程序運行兩次,而不是顯示第一個窗口
這是我在App.xaml.cs代碼,在OnStartup()方法:
var runningProcess = GetAnotherAppInstanceIfExists();
if (runningProcess != null)
{
HandleMultipleInstances(runningProcess);
Environment.Exit(0);
}
public Process GetAnotherAppInstanceIfExists()
{
var currentProcess = Process.GetCurrentProcess();
var appProcesses = new List<string> { "myApp", "myApp.vshost" };
var allProcesses = Process.GetProcesses();
var myAppProcess = (from process in allProcesses
where process.Id != currentProcess.Id && appProcesses.Contains(process.ProcessName)
select process).FirstOrDefault();
if (myAppProcess != null)
{
return currentProcess;
}
return myAppProcess;
}
public void HandleMultipleInstances(Process runningProcess)
{
SetForegroundWindow(runningProcess.MainWindowHandle);
ShowWindow(runningProcess.MainWindowHandle, SW_RESTORE);
}
所以應用程序,當第二次跑,犯規打開一個新的實例,這是偉大的。但是,如果最小化,我需要找到第一個實例並再次顯示窗口。這條線是爲了:
ShowWindow(runningProcess.MainWindowHandle, SW_RESTORE);
它不起作用。我究竟做錯了什麼?我在網上查了很多例子,我的代碼和他們一樣。
這是如何最大化已打開的應用程序的窗口? –
我編輯了代碼片段。您可以將WindowState設置爲最大化來實現此目的。 –