当在辅助线程上引发异常时,可能会发生这种情况。请参阅此页面上的备注部分:
独立或浏览器托管的 WPF 应用程序使用 Application 类来检测未处理的异常(请参阅 DispatcherUnhandledException)。但是,Application 只能检测在 Application 类正在运行的同一线程上引发的未处理异常。通常,一个应用程序会有一个主用户界面 (UI) 线程,因此 Application 类的未处理异常检测行为就足够了。但是,主 UI 线程上的 Application 类不会自动检测在辅助线程上引发的未处理异常。
您可以尝试使用此事件来捕获检测异常并记录错误:
AppDomain.UnhandledException Event
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
Exception e = (Exception) args.ExceptionObject;
Console.WriteLine("MyHandler caught : " + e.Message);
}
更新:
除了线程问题之外,如果您将 try...catch 块放在错误的位置,它也可能是原因。考虑这个例子:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Do();
}
private void Do()
{
try
{
int result = new ClassLibrary1.Class1().Calculate(2, 4);
}
catch (System.Exception ex)
{
Console.WriteLine("MyHandler caught by try...catch: " + ex.Message);
}
}
}
这将导致调用 Do() 的行出现异常,因为此处的 CLR 尝试在此时解析程序集。未捕获异常并且应用程序终止。
但如果你试试这个:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
try
{
Do();
}
catch (System.Exception ex)
{
Console.WriteLine("MyHandler caught by try...catch: " + ex.Message);
}
}
private void Do()
{
int result = new ClassLibrary1.Class1().Calculate(2, 4);
}
}
输出是:
MyHandler 被 try...catch 捕获:无法加载文件或程序集 'ClassLibrary1,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 或其依赖项之一。该系统找不到指定的文件。
请注意,当您在引用程序集的同一函数中订阅 UnhandledException 事件时,它不会被触发。这也有效:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(
(sender, args) =>
{
Exception ex = (Exception)args.ExceptionObject;
Console.WriteLine("MyHandler caught by UnhandledException handler: " + ex.Message);
});
Do();
}
private void Do()
{
int result = new ClassLibrary1.Class1().Calculate(2, 4);
}
结果:
MyHandler 被 UnhandledException 处理程序捕获:无法加载文件或程序集 'ClassLibrary1,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 或其依赖项之一。该系统找不到指定的文件。
希望能帮助到你。