2011-12-14 51 views
-1

如果在IEditableObject.EndEdit中引发异常(使用绑定从WPF Datagrid设置时)。框架捕获IEditableObject.EndEdit中的异常

该框架捕捉到该异常,并且该消息显示在控制台“类型'System.NullReferenceException'的第一个机会异常”中。

我实际上喜欢这个异常更明确,因为我使用DispatcherUnhandledException和AppDomain.CurrentDomain.UnhandledException“处理”所有未处理的异常。在关闭应用程序之前,我在哪里登录异常并通知用户。

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

+0

什么是你绑定到`DataGrid.ItemSource`? – 2011-12-14 13:16:43

回答

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