我正在全球范围内捕捉异常,除了应用程序不会在UnhandledExceptions
上恢复的部分外,它的工作正常。
我在MSDN上读到,为了允许调度程序Exception捕获未处理的非UI异常,我需要做两件事,但我不知道该怎么做。
DispatcherUnhandledException
被提升。我的代码:
public partial class App : Application
{
public App()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message, "Dispatcher Exception", MessageBoxButton.OK, MessageBoxImage.Warning);
e.Handled = true;
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = e.ExceptionObject as Exception;
MessageBox.Show(ex.Message, "Unhandeled Exception Event", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
答案 0 :(得分:0)
唐'知道这是否有帮助,但是要调度到主UI线程,你需要调用Invoke。
e.g。如果您在主表单上,可以使用一些sudo代码。
try
{
... stuff
}
catch(Exception ex)
{
this.Invoke(()=> throw ex));
}
如果您不在主表单上,那么您将需要从发生错误的位置抛出一个事件并在主表单上监听,然后在附加到侦听器的方法中执行上述操作。
答案 1 :(得分:0)
来自MSDN:
此事件提供未捕获异常的通知。它允许 应用程序在系统之前记录有关异常的信息 默认处理程序向用户报告异常并终止 应用强>
(强调补充)
因此UnhandledException
事件仅用于记录信息等。它不会阻止应用程序的关闭。
但是在Windows.Forms应用程序中,您可以考虑这个(相同的MSDN artice,向下滚动):
在使用Windows窗体的应用程序中,未处理的异常 主应用程序线程导致Application.ThreadException事件 被提高。如果处理此事件,则默认行为是 未处理的异常不会终止应用程序,尽管如此 应用程序处于未知状态。
(强调补充)。
答案 2 :(得分:0)
它对我来说很好
Array<number | string>