【发布时间】:2018-10-19 18:35:30
【问题描述】:
如果应用程序已经在运行并且用户尝试运行程序的新实例(单个实例),我正在尝试从系统托盘打开 MainWindow
我正在关注本教程: https://www.codeproject.com/Articles/32908/C-Single-Instance-App-With-the-Ability-To-Restore
如果 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;
}
使用 MainWinow 处理程序显示 MainWindow
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;
}
但是,我仍然想知道为什么 Handler 以黑屏打开我的 MainWindow ?
【问题讨论】:
-
可能是需要重新初始化组件
-
@John112358 我绑定在 ShowWindow() 函数中调用 InitializeCompnent() 但它不起作用。非常感谢您的回答
标签: c# wpf interprocess