【发布时间】:2019-05-29 03:35:49
【问题描述】:
我创建了 3 个不同的应用程序
应用 1: 这是一个 WPF 应用程序,它有 1 个显示“Hello Word”的窗口(MainWindow)。
应用 2: 这是一个 WPF 应用程序 此应用程序将创建应用程序 1 的 MainWindow 实例。 如下所示
MainWindow window = new MainWindow();
//And it will store it's window handle to some file
string filePath = @"c:\windowHandle.txt";
var windowInteropHelper = new WindowInteropHelper(window);
File.WriteAllText(filePath, windowInteropHelper.EnsureHandle().ToString());
应用 3: 这又是一个有 2 个按钮的 WPF 应用程序 “显示应用程序 1”和“隐藏应用程序 1”
private void show_Click(object sender, RoutedEventArgs e)
{
ShowWindow(GetWindowHandle(), 5);
}
private void hide_Click(object sender, RoutedEventArgs e)
{
ShowWindow(GetWindowHandle(), 0);
}
private int GetWindowHandle()
{
string handle = File.ReadAllText(@"C:\windowHandle.txt");
return Convert.ToInt32(handle);
}
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int nCmdShow);
现在我将启动应用程序 2 和应用程序 3。 一旦我单击应用程序 3 中的“显示应用程序 1”按钮, 窗口(应用程序 1)带有黑色背景。它没有显示“Hello world”。 它显示窗口标题,但窗口的其余部分是黑色的。
如果有人知道如何解决它?请告诉我。
如果您对我的查询有任何疑问,请告诉我:)。
【问题讨论】:
-
只是一个快速的猜测......你还没有初始化窗口上的控件..如果我是对的,请尝试显示窗口并再次从应用程序 2 中隐藏它,这应该可以解决问题
-
好的,开始工作了......有点......只有当你在 app2 中显示窗口并从 app3 中隐藏它时它才有效......之后,来自 app3 的显示工作......如果你从 app2 中隐藏 id 没有......似乎 wpf 中的 hide() 不仅仅是一个简单的隐藏
-
所以解决方法是:来自 app2 的 Show() >来自 app2 的 ShowWindow(wnd, 0) >来自 app3 的 ShowWindow(wnd, 5)
-
感谢@FastJack3。我还观察到这一点,如果我们在 app2 中调用 show 那么它将起作用。我在想这是唯一的方法。如果不显示在 app2 中,我们不能这样做吗?
-
因为 WPF 似乎在其自己的 Show() 函数中做了很多初始化工作,所以不。因为如果您只是进行简单的 WinAPI Show 调用,则不会执行此代码
标签: c# wpf interopservices