【发布时间】:2015-07-13 14:27:23
【问题描述】:
我通过ElementHost 控件在我的winforms 应用程序中托管一个WPF 应用程序。我已经实现了一个逻辑,它在 WPF 端监听未处理的异常。如果捕获到异常,则应释放 ElementHost 控件并关闭所有相关的 WPF 窗口。
如果只有一个 WPF 窗口,这工作得很好。由于该 WPF 应用程序可以打开更多子窗口(即未停靠的窗口),因此当我处置 ElementHost 控件时,这些窗口不会关闭。
有没有一种简单的方法可以从 winforms 端关闭 WPF 窗口和所有子窗口?
我已经尝试过Application.OpenForms,但子 WPF 窗口没有显示(不知何故有道理 ;-))。
备注:我确实拥有 WPF 代码,所以我可以在 WPF 端实现一些东西,但我真的很想坚持 win 表单端。
我还想考虑 WPF 窗口代码可能“卡住”并且无法做出反应并自行关闭的情况。这就是为什么我想从“外面”杀死窗户
【问题讨论】:
-
好吧,保留你自己的
List<Window>。在创建 WPF 窗口时添加窗口,使用窗口的 Closed 事件将其删除。 -
WPF窗口不应该在关闭时负责清理其子窗口吗?
-
@HansPassant 我没有问题找到根 WPF 窗口(因为它托管在
ElementHost) -
@cdkMoose 我基本上同意你的观点,但我在考虑 WPF 窗口可能无法做出反应并且以某种方式“卡住”的情况。然后我希望能够杀死窗户
-
不确定我是否能想象创建孩子的 WPF 窗口无法杀死它们,但 WinForms 窗口可以杀死它们的场景。你有用例吗?