【发布时间】:2018-03-09 04:36:14
【问题描述】:
我正在阅读 C# 简而言之(线程章节),并试图捕获一个除以零的异常,该异常是我从按钮事件处理程序中抛出的一个新线程。 AppDomain.CurrentDomain.UnhandledException 按预期触发。事件处理方法只是显示一个名为“ErrorWindow”的窗口。当我进入窗口的构造函数时,调试器抛出异常并且窗口不显示。
这是我所拥有的:
- 目标框架:4.5.2
- 目标平台:X64
该应用程序是一个 WPF windows 应用程序,包含两个窗口:
- MainWindow:有一个按钮,可以执行下面的代码 sn-p。
- ErrorWindow:在 AppDomain.CurrentDomain.UnhandledException 事件处理程序中显示的只是一个空白窗口
代码sn-p:
var thread = new Thread(() =>
{
int result = 100 / int.Parse("0");
});
thread.Start();
我在 App.xaml.cs 的 StartUp 事件处理程序中附加了 AppDomain.CurrentDomain.UnhandledException 事件处理程序。事件处理程序只需创建一个 ErrorWindow 实例并尝试显示它。
如果有人能够重现这种行为并解释原因,那就太好了。如果需要,我会分享我的 VS 项目。
PS:这只会在我创建线程时发生。如果我的 DivideByZeroException 是从主 UI 线程抛出的,那么窗口会按预期显示。
PS:将窗口的显示编组到 UI 线程不起作用,我不希望它这样做。 谢谢!
【问题讨论】:
-
您对使用
Thread有什么特殊要求吗?Task通过为您提供一种受支持的方式来捕获和观察异常,从而使这种情况变得更加容易 -
我没有要求。我更喜欢使用线程,因为我可以。谢谢@KevinGosse!
标签: c# wpf multithreading exception appdomain