在一个线程中,我捕获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
,或通过等待它)。只有当运行时确定没有其他人可以观察到异常时,才会触发该事件。