C# 处理从windows应用商店项目中的线程池传播出去的意外异常

C# 处理从windows应用商店项目中的线程池传播出去的意外异常,c#,.net,exception-handling,windows-runtime,windows-store-apps,C#,.net,Exception Handling,Windows Runtime,Windows Store Apps,我想在一个C#windows应用商店项目中记录未捕获的异常 对于在UI线程中执行的代码,我可以使用Windows.UI.Xaml.Application.Current.UnhandledException事件,但在tread池中执行的代码的异常不会触发该事件 我可以尝试确保所有“RunAsync”调用都被包装以记录未捕获的异常,但很容易意外地绕过该解决方案。API中是否已经有相关内容?我不确定是否有可用内容,但您可以创建自己的RunAsync版本,在使用平台版本的RunAsync执行之前,需要

我想在一个C#windows应用商店项目中记录未捕获的异常

对于在UI线程中执行的代码,我可以使用Windows.UI.Xaml.Application.Current.UnhandledException事件,但在tread池中执行的代码的异常不会触发该事件


我可以尝试确保所有“RunAsync”调用都被包装以记录未捕获的异常,但很容易意外地绕过该解决方案。API中是否已经有相关内容?

我不确定是否有可用内容,但您可以创建自己的RunAsync版本,在使用平台版本的RunAsync执行之前,需要执行一个动作,并将其包装在try/catch块中,并确保这是在后台运行的唯一方法


除此之外,在启用所有异常的情况下进行中断调试(Alt+Ctrl+E,全选)可以帮助您找到问题所在。

如何安排代码作为Threadpoolthread运行?如果您正在使用任务,请检查TaskScheduler上的UnobservedException事件

System.Threading.Tasks.TaskScheduler.UnobservedTaskException +=new EventHandler<UnobservedTaskExceptionEventArgs>(...);
System.Threading.Tasks.TaskScheduler.UnobservedTaskException+=neweventhandler(…);

目前我知道有两个意外的异常处理程序:

  • System.Threading.Tasks.TaskScheduler.unobservedtaskeexception
    用于存储在任务中的异常,这些异常在任务被垃圾收集之前无法访问
  • Application.Current.UnhandledException
    用于从UI线程传播的异常

我还不知道有什么东西可以捕获从线程池传播出去的异常。

这非常有用,但不能捕获Windows.System.Threading.ThreadPool.RunAsync调用的代码中的异常。不幸的是,这不会捕获通过调用恰好在读池上运行的框架方法运行的异常。例如,发布到新的同步上下文。