如果在IEditableObject.EndEdit中抛出异常(当使用绑定从WPF Datagrid设置时)。
框架捕获异常,并且此消息显示在控制台“类型'System.NullReferenceException'的第一次机会异常'..”。
我真的希望这个异常更加明确,因为我使用DispatcherUnhandledException和AppDomain.CurrentDomain.UnhandledException“处理”所有未处理的异常。我在关闭应用程序之前记录异常并通知用户的地方。
我是否需要使用某种hack,例如向每个EndEdit添加try-catch并使用Application.Dispatcher重新抛出异常?
答案 0 :(得分:0)
这是我最终做的事情
public class Editable : NotificationObject, IEditableObject
{
...
public void EndEdit()
{
try
{
...
}
catch (Exception e)
{
ExceptionUtils.ThrowOnUIThread(e);
}
}
}
}
public static class ExceptionUtils
{
public static void ThrowOnUIThread(Exception exception)
{
exception.PreserveStackTrace();
Application.Current.Dispatcher.BeginInvoke(new Action(() => { throw exception; }));
}
}
关于PreserveStackTrace,请参阅此question。