C\#의 이상 처리 메커니즘
12033 단어 예외 처리
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(" !");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: