WinRT在非ui线程中运行时不会报告异常



在一个线程中,我捕获ThreadCanceledException,但不是其他的,希望看到错误,如果有的话。但是,当线程启动并且代码出现错误时,它会生成消息

A first chance exception of type 'System.Exception' occurred in ...
The thread ... has exited with code 259 (0x103)

并优雅地退出,而不显示实际的异常。只有当我在UI线程中运行代码时,才能识别错误。

是否有一种方法可以在线程内报告实际异常?

您可以通过使用TaskScheduler.UnobservedTaskException事件来跟踪这些异常:

TaskScheduler.UnobservedTaskException += (sender, eventArgs) =>
{
    Debug.WriteLine("Unobserved exception: {0}", eventArgs.Exception);
};

请注意,此事件不会立即触发,而是在垃圾收集器收集故障任务后触发。这是因为创建任务的代码应该观察异常(例如,通过调用task.Wait()task.Result,或通过等待它)。只有当运行时确定没有其他人可以观察到异常时,才会触发该事件。

最新更新