我有一个程序,其中之一,需要能够刷新目录的内容时,用户告诉它。实际的任务并不重要,但这是我所知道的导致这个问题发生的最简单的方法。
如果我告诉它打开一个不存在的目录,我将在vs中获得“未处理的异常”对话框,堆栈跟踪从外部到内部:
[外部代码]
文本框预览搜索事件
[外部代码]
正在设置ClassA的路径属性
正在调用ClassA的内部路径更新函数
调用inotifyPropertyChanged事件
[外部代码]
打电话给getter索取b级儿童名单
调用ClassB的内部目录列表函数
然后在这个内部函数中失败。我的app.xaml.cs中包含以下内容:
private void Application_Startup(object sender, StartupEventArgs e)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.Current.Dispatcher.UnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(Dispatcher_UnhandledException);
}
但它们的异常处理程序都没有被调用。如果我从外部vs运行这个程序,我根本不会收到异常通知,它只是因为无效的输入而中断。是的,正在调用应用程序启动事件。如何正确“捕获”此异常,以便提供友好的错误消息并终止程序?
哦,如果我把try/catch放在调用堆栈的任何位置,而不是放在外部代码调用之后,它也不会捕捉到它。
[编辑]
经过一些搜索,我确信这是wpf绑定系统的副作用。由于成功创建了directoryinfo(即使是在不存在的目录上),因此在绑定检索值和wpf eats绑定异常之前,不会发生错误。
如果有人有任何进一步的想法,我将对此保持开放,但我认为我所能做的最好的事情是放弃延迟加载,如果我认为它可能导致异常,至少在应用程序得到更充分的证明之前。