WPF对话框不起作用的应用程序未处理的异常

时间:2015-03-05 23:20:28

标签: wpf unhandled-exception

我有一个应用程序,我有一个未处理异常的处理程序,向用户显示一个更好的对话框,并允许他们提交失败的报告。

我最初有一个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()调用之前放置一个消息框,它按预期工作并等待它返回。

我很困惑,有人对此有任何见解吗?

1 个答案:

答案 0 :(得分:1)

好的,我不确定这是否真的是一个解决方案,所以我并没有将其标记为答案,但它似乎并不像未处理的异常处理程序中的WPF对话框那样。我尝试只显示一个空白的WPF对话框,以确保它在我的代码中不是一些奇怪的东西并且它做同样的事情。只要我在其中放置一个Winforms对话框,就会在ShowDialog例程中正确停止并等待它返回。当我用WPF调用它时它会显示对话框但是继续执行代码(我的下一个命令是关闭)所以它只是闪烁对话框然后消失。我还尝试在ShowDialog()调用之后立即放置一个消息框,它会弹出对话框并立即显示消息框。一旦我关闭消息框,它就会关闭应用程序。

无论如何,我最终做的是创建一个WinForms对话框,它只包含一个ElementHost对象并将我的WPF对话框转换为WPF UserControl。然后我在ElementHost中托管了WPF控件。这看起来有点倒退和丑陋,但它有效......

如果有人有更好的建议使用纯WPF,我会将其标记为答案。