Я пытаюсь открыть MainWindow из системного трея, если приложение уже запущено, и пользователь попытался запустить новый экземпляр программы (один экземпляр)
Я следовал этому руководству: https://www.codeproject.com/Articles/32908/C-Single-Instance-App-With-the-Ability-To-Restore
Это прекрасно работало, если MainWindow свернуто, однако, когда я закрываю окно, которое просто скрываю, и заново открываю его из вновь созданного экземпляра, передавая сообщение (используя обработчик основного окна), Я открываю окно, но это черный экран.
Закрытие MainWindow:
private void main_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
// If the window is visible, then hide it
if (IsVisible)
Visibility = Visibility.Hidden;
e.Cancel = true;
}
Отображение MainWindow с помощью обработчика MainWinow
public const int SW_SHOWNORMAL = 1;
[DllImportAttribute("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImportAttribute("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
public static void ShowToFront(IntPtr window) {
ShowWindow(window, SW_SHOWNORMAL);
SetForegroundWindow(window);
}
Как я вызываю его в моемMainWindow.xaml.cs
public void ShowWindow() {
WinApi.ShowToFront(new WindowInteropHelper(this).Handle);
}
Мне удалось получить нормальное окно, заменив
public void ShowWindow() {
WinApi.ShowToFront(new WindowInteropHelper(this).Handle);
}
на
public void ShowWindow() {
Visibility = Visibility.Visible;
WindowState = WindowState.Normal;
}
Hoverver, мне все еще интересно, почемуОбработчик открыл мое главное окно с черным экраном?
Обычный: ![Normal View](https://i.stack.imgur.com/TDMUt.png)
Черный экран: ![enter image description here](https://i.stack.imgur.com/nqDsc.png)