我有一个应用程序,我有一个未处理异常的处理程序,向用户显示一个更好的对话框,并允许他们提交失败的报告。
我最初有一个Winforms对话框,它正常工作。但是我决定将它更新为WPF对话框以匹配已升级到WPF的应用程序中的所有其他内容,并且它显示出一些奇怪的行为。
我最初有
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf Boom
并在处理程序中(msg是构造的字符串消息):
Dim d As New Dlg_Boom(msg)
d.ShowDialog()
Me.Shutdown()
当我切换到WPF对话框时,会出现对话框,但随后我立即得到“程序已停止工作”窗口对话框。
我也尝试过使用两者:
AddHandler Dispatcher.UnhandledException, AddressOf Boom
AddHandler Application.DispatcherUnhandledException, AddressOf Boom
通过这些,我可以选择设置e.Handled = True。如果我把它保留为假,我会得到不工作的对话框,如果我将其设置为true,它会闪烁我的WPF对话框并立即将其关闭。
这就像是忽略了它是ShowDialog()并将其视为Show()而不是等待它返回的事实。奇怪的是,如果我在ShowDialog()调用之前放置一个消息框,它按预期工作并等待它返回。
我很困惑,有人对此有任何见解吗?
答案 0 :(得分:1)
好的,我不确定这是否真的是一个解决方案,所以我并没有将其标记为答案,但它似乎并不像未处理的异常处理程序中的WPF对话框那样。我尝试只显示一个空白的WPF对话框,以确保它在我的代码中不是一些奇怪的东西并且它做同样的事情。只要我在其中放置一个Winforms对话框,就会在ShowDialog例程中正确停止并等待它返回。当我用WPF调用它时它会显示对话框但是继续执行代码(我的下一个命令是关闭)所以它只是闪烁对话框然后消失。我还尝试在ShowDialog()调用之后立即放置一个消息框,它会弹出对话框并立即显示消息框。一旦我关闭消息框,它就会关闭应用程序。
无论如何,我最终做的是创建一个WinForms对话框,它只包含一个ElementHost对象并将我的WPF对话框转换为WPF UserControl。然后我在ElementHost中托管了WPF控件。这看起来有点倒退和丑陋,但它有效......
如果有人有更好的建议使用纯WPF,我会将其标记为答案。