2013-08-20 1 views
0

MSDN을 rethrowing이 방법은 스레드에서 호출 될 때, 시스템을 중단 할 수있는 스레드에서 ThreadAbortException이를 던져 Thread.Abort 방법 -C#을 - ThreadAbortException이

에 대해 말한다. ThreadAbortException은 응용 프로그램 코드에 의해 catch 될 수있는 특별한 예외이지만 ResetAbort가 호출되지 않는 한 catch 블록의 끝에서 다시 throw됩니다. ResetAbort는 중단 요청을 취소하고 ThreadAbortException이 스레드를 종료하지 못하게합니다. 스레드가 중단되기 전에 실행되지 않은 finally 블록이 실행됩니다.

따라서 가장 인접한 catch 블록 또는 모든 catch 블록을 예외로 한 번만 예외가 발생합니까? 또한, 실행되지 않은 finally 블록이 실행될 때 완전히 실행되지 않은 블록과 부분적으로 실행 된 블록을 모두 포함합니까?

+2

코드 조각을 작성하고 사용해보십시오. – Ehsan

답변

2

finally 블록은 실행중인 경우 스택 스택을 롤백하는 동안 실행해야하는 경우 항상 ThreadAbortException에서 완전히 보호됩니다.

그렇습니다. 분명히 ThreadAbortException 블록이 가로 채는 동일한 스레드에서 try... catch 블록의 끝에 자동으로 다시 생성됩니다. 그렇지 않으면 의미가 없습니다. 단지 두 개의 "삶"을 가진 ThreadAbortException을 사용해야하는 용도는 무엇입니까?

이것은 ThreadAbortException을 막을 수 있다고 논리적일까요?

try 
{ 
    try 
    { 
     // The Thread.Abort "happens" here 
     Thread.Sleep(Timeout.Infinite); 
    } 
    catch 
    { 
    } 
} 
catch 
{ 
} 

try 
{ 
    // The Thread.Abort "happens" here 
    Thread.Sleep(Timeout.Infinite); 
} 
catch 
{ 
} 
+0

고마워요 !! – Cygnus