如果catch中的代码失败会发生什么

时间:2012-01-18 11:18:28

标签: c# try-catch

在Web应用程序中使用c#代码,我在我的代码中有一个try catch语句,并且在catch中我想做几件事,比如给管理员发电子邮件。

我想知道如果catch中的电子邮件代码或其他代码失败会发生什么?有没有办法处理应用程序中的一般异常?

9 个答案:

答案 0 :(得分:4)

描述

  1. 您可以做两件事来捕捉未处理的异常。 Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException

      

    Application.ThreadException 在抛出未捕获的线程异常时发生。

         

    AppDomain.CurrentDomain.UnhandledException 在未捕获到异常时发生。

  2. 处理catch块内的异常。

  3. 示例

    1. Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException

      Application.ThreadException +=
          new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
      
      AppDomain.CurrentDomain.UnhandledException += 
           new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
      
    2. 处理catch块内的异常。

      try
      {
          // do something
      } 
      catch (Exception ex)
      {
          try
          {
              // send E-Mail
          } 
          catch
          {
              // handle 
          }   
      }
      
    3. 更多信息

答案 1 :(得分:1)

如果在catch子句中抛出异常,它只会引发另一个异常。解决它的一种方法是简单地进行嵌套尝试,例如

try {
  <stuff>
} catch(Exception e) {
  try {
    <email admin>
  catch(EmailException e2) {
    <stuff>
  }
  <stuff>
}

答案 2 :(得分:1)

一种方法是在catch语句中处理异常:

try
{
    // Do stuff
}
catch (SpecificException ex)
{
    try
    {
        // Try e-mailing
    }
    catch (AnotherException ex1)
    {
        // Write local log file
    }
 }

这将允许程序继续。

但是,如果程序无法在应用程序级别处理所有未处理的异常并在那里执行某些操作。

答案 3 :(得分:1)

当然,你必须将你尝试catch的例程包含在另一个try catch中,或者在try语句包围的catch语句中编写你的代码。

答案 4 :(得分:1)

你可以尝试应用异常,如果它是致命的错误。虽然现在在.net框架中已经过时了Checkthis

Application exceptions

public sealed class Product
{
  private String name;
  public String Name
  {
    get { return name; }
    set
    {
      if (value != null) name = value;
      else throw new UndefinedNameException();
    }
  }
  public sealed class UndefinedNameException : ApplicationException
  {
    public UndefinedNameException() : base("Name cannot be null") {}
  }
} // end of class Product

答案 5 :(得分:1)

如果在catch块中抛出异常,它将以正常的异常方式传播。

您需要以下代码:

try 
{
  //code 
}
catch (SomeKindOfError e1)
{
    try 
    {
       // send email
    }
    catch (EmailError e2)
    {

    }
}

您的例外将被符合条件的任何外部区块捕获,例如:如果你有:

try 
{
   // ...
   try {
      //code 
   }
   catch (SomeKindOfErrorThatIsNotEmailError e1)
   {
      // send email
   }
   // ...
}
catch 
{
    // your email exception will get caught here
}

答案 6 :(得分:1)

  

我想知道如果catch中的电子邮件代码或其他代码失败会发生什么?

catch中抛出的异常将由CLR默认处理程序处理,如果没有包含在另一个try-catch对中。

finally 肯定会执行。所以你可以用它来清理或关闭资源。

  

有没有办法处理应用程序中的常规异常?

在main方法中,编写以下代码部分:

try
{
    // write normal code
}
catch(Exception e)
{
    // if here exception occurs ... God Help.
}

答案 7 :(得分:1)

这适用于Windows应用程序

 static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                AppDomain.CurrentDomain.UnhandledException += AppDomain_UnhandledException;

                Application.ThreadException += Application_ThreadException;
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

            }
            static void Application_ThreadException(Object sender, ThreadExceptionEventArgs e)
            {
                MessageBox.Show(e.Exception.Message, "Application.ThreadException");
            }

            static void AppDomain_UnhandledException(Object sender, UnhandledExceptionEventArgs e)
            {
                MessageBox.Show(((Exception)e.ExceptionObject).Message, "AppDomain.UnhandledException");
            }

答案 8 :(得分:0)

try代码段中使用catch catch序列与此事实无关 从逻辑上讲,您不会捕获相同的异常,因此您可以知道哪个部分失败了

很多人给你使用的代码,接受其中一个答案