COMException不会触发AppDomain.UnhandledException事件

时间:2012-09-07 00:56:21

标签: .net exception-handling dao unhandled-exception comexception

我有一个控制台应用程序,其代码如下所示(简化):

public static void Main(string[] args)
{
  AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;

  InsertRow();
}

private static void InsertRow();
{
  DAO.DBEngine dbEngine = new DAO.DBEngine();
  DAO.Database db = dbEngine.OpenDatabase("database_name");
  DAO.Recordset rs = db.OpenRecordset("table_name");
  DAO.Field myField = new DAO.Field();
  rs.AddNew();
  // System.Runtime.InteropServices.COMException occurs here, but only in the IDE Debugger:
  myField.Value = "oops, this value is bigger than the size of the column";
  rs.Close();
  db.Close();
}

private static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
{
  // Log error
  Environment.Exit(1);
}

为什么COMException不会触发UnhandledException事件?

在我的真实代码中,DAO的东西是在一个单独的类中。我尝试catch COMException并再次抛出它,如下所示:

private static void InsertRow();
{
  try
  {
    ... // See code above
    myField.Value = "oops, this value is bigger than the size of the column";
  }
  catch (System.Runtime.InteropServices.COMException ex)
  {
    throw new Exception(ex.Message, ex.InnerException);
  }
  finally
  {
    rs.Close();
    db.Close();
  }
}

然而,这也不起作用。 我不理解的是什么?

不过,这确实有效,但我不想这样做:

  catch (System.Runtime.InteropServices.COMException ex)
  {
    // Log error
    Environment.Exit(1);
  }

让风滚草开始!

0 个答案:

没有答案