我有一个为 .NET 4 Full Framework 编写的 WPF 应用程序。该应用程序使用 SQL Anywhere 作为其数据库。我的应用程序有一个未处理的异常处理程序,它总是将错误记录到程序的自定义事件日志中。然后它向用户显示错误消息。该程序还会在即将执行某项操作时向事件日志发送消息,以便更轻松地进行调试。
该应用程序安装在运行 Windows 7 并具有 8 GB RAM 的用户笔记本电脑上。在本机上启动时,会显示启动画面,然后显示程序的主窗口。绘制后不到一秒钟,程序就死了。没有显示错误消息。
检查事件日志显示程序写入的最后一条消息是它正在检查数据库中是否存在用户。没有错误消息。
显示的最后一条消息后面的代码是对执行某些参数检查然后执行以下 EF 查询的方法的调用:
LPRCore.CarSystem.User user = null;
IQueryable<User> query = from u in context.Users
from m in context.Members.Where( m => m.UserId == u.UserId )
.DefaultIfEmpty()
where u.LoweredUserName == userName.ToLower() && m == null
select u;
try {
user = query.SingleOrDefault();
} catch ( Exception ex ) {
....
}
我不知道是否曾经调用过 catch 块中的代码。我的怀疑是它被调用并且那里发生了异常。
我的问题是,如果catch块中发生异常,如果没有其他异常处理程序来捕获错误,那么上层的Unhandled Exception处理程序不会捕获该异常吗?或者它会导致程序在没有报告任何内容的情况下死掉?