C\#의 이상 처리 메커니즘

12033 단어 예외 처리
완벽 한 응용 프로그램 과 기술 이 뛰어난 프로그래머 는 절대 실수 하지 않 을 수 없다.완벽 한 코드 를 추구 하기 보 다 는 프로그램 에서 예상 할 수 있 는 이상 을 발표 하기 전에 잘 처리 하 는 것 이 가장 가치 있 을 것 이다.그렇다면 C\#이상 은 어떻게 처리 하나 요?우선,우 리 는 가장 일반적인 이상 부터 말한다.
try-catch-finally 블록 을 사용 하여 이상 을 캡 처 합 니 다.기본 형식 은 다음 과 같 습 니 다.
 1 try
 2 {
 3     //
 4 }
 5 catch(DivideByZeroException de)
 6 {
 7 }
 8 catch(ArithmeticException ae)
 9 {
10 }
11 catch(Exception e)
12 {
13     //       ,                  (DivideByZeroException==>ArithmeticException==>Exception),
14      //
15 }
16 finally
17 {
18     //      (   catch  return) ,         ( :    )
19     //        , finally      break、continue、return       。
20 }

ASP.NET 이상 처리
이상 의 try-catch-finally 처리 방식 을 제외 하고 세 가지 방법 으로 이상 을 포착 합 니 다.
1.페이지 급 오류 처리(Page오류 이벤트
protected void Page_Error(object sender, EventArgs e)
{
    string errorMsg = String.Empty;
    Exception currentError = Server.GetLastError();
    errorMsg += "      :<br/>";
    errorMsg += "    :" + Request.Url + "<br/>";
    errorMsg += "    :" + currentError.Message + "<br/>";
    Response.Write(errorMsg);
    Server.ClearError();//    (        Application_Error  )
}

2.응용 프로그램 급(global.aax)오류 처리(응용 프로그램 을 통 해오류 이벤트
protected void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    Exception iex = ex.InnerException;
    string errorMsg = String.Empty;
    string particular = String.Empty;
    if (iex != null)
    {
        errorMsg = iex.Message;
        particular = iex.StackTrace;
    }
    else
    {
        errorMsg = ex.Message;
        particular = ex.StackTrace;
    }
    //AddLog(errorMsg, particular);
    Server.ClearError();//         
}

3.프로그램 설정(web.config)
<system.web>    
  <!--mode    :On,Off,RemoteOnly,defaultRedirect        URL-->
  <customErrors mode="On" defaultRedirect="ErrorPage.htm">
    <!--statusCode     ,redirect      URL-->
    <error statusCode="403" redirect="NoAccess.htm"/>
    <error statusCode="404" redirect="FileNoFound.htm"/>
  </customErrors>
</system.web>

 
WinForm 응용 프로그램 이상 처리 
WinForm 의 응용 프로그램 에서 try-catch-finally 방식 을 제외 하고 어떻게 전체적인 이상 처 리 를 실현 합 니까?어 플 리 케 이 션 이 없 으 니까Error 이 벤트 는 의뢰 를 통 해 이 루어 질 수 있 습 니 다.
 
internal class ThreadExceptionHandler
{
    //        
     public void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
    {
        try
        {
            //      "Abort"       
              DialogResult result = ShowThreadExceptionDialog(e.Exception);
            if (result == DialogResult.Abort)
            {
                Application.Exit();
            }
        }
        catch
        {
            try
            {
                MessageBox.Show("    ", "    ", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
            finally
            {
                Application.Exit();
            }
        }
    }
    private DialogResult ShowThreadExceptionDialog(Exception e)
    {
        string errorMsg = "    :\t\t" + e.Message + "\t\t" + e.GetType() + "\t\t" + e.StackTrace;
        return MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
    }
}
static class Program
{
    ///<summary>
    /// The main entry point for the application.
    ///</summary>
    [STAThread]
    static void Main()
    {
        ThreadExceptionHandler handler = new ThreadExceptionHandler();
        Application.ThreadException += new ThreadExceptionEventHandler(handler.Application_ThreadException);
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new frmEvent());
    }
}
public partial class frmEvent : Form
{
    private void btnException_Click(object sender, EventArgs e)
    {
        throw new InvalidOperationException("");
    }
}

좋은 웹페이지 즐겨찾기