Framework在IEditableObject.EndEdit中捕获异常

时间:2011-12-14 10:52:28

标签: c# .net wpf

如果在IEditableObject.EndEdit中抛出异常(当使用绑定从WPF Datagrid设置时)。

框架捕获异常,并且此消息显示在控制台“类型'System.NullReferenceException'的第一次机会异常'..”。

我真的希望这个异常更加明确,因为我使用DispatcherUnhandledException和AppDomain.CurrentDomain.UnhandledException“处理”所有未处理的异常。我在关闭应用程序之前记录异常并通知用户的地方。

我是否需要使用某种hack,例如向每个EndEdit添加try-catch并使用Application.Dispatcher重新抛出异常?

1 个答案:

答案 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