문제

경우 중단하의 실행 스레드가 나는 항상 의심하는 사이에 종료와 이벤트 처리기 this:

int result = WaitHandle.WaitAny(handles);
if (result = WAIT_FINALIZE)
  FinalizeAndExit();

고를 사용하여 이벤트가 신호 스레드 그것을 종료해야 합니다

하거나 처리하는 스레드를 완료하는 스레드...

try
{
  // Main execution
}
catch(ThreadAbortException e)
{
  // FinalizeAndExit();
}
finally
{
}

나는 일반적으로 기울어를 사용하여 디 접근 방식 때문에 그것은 처리할 수 있지만 그것은 재에 제기의 끝에서 catch 블록,또한 피할 수은 스레드에서 유지되고 살아있는"위험한 방법",그러나 나는 본 적이 모두 접근한다.

무엇이라고 생각하십니까?거기에는 어떤 상황을 사용하는 것이 최선이나 다른 또는 그것은 최고의 사용이 항상 접근 x?

도움이 되었습니까?

해결책

일반적으로,첫 번째 방법은 그것을 선택할 만한.

그것의 하드(그렇지 않으면 불가능하다)코드를 작성하는 것입니다 항상 디 정상적입니다.예외에서 발생할 수 있습니다 중의 어떤 스레드가 발생하고,그래서 어떤 상황이 어려울 수 있습니다.

예를 들어,예외가 발생할 수 있습을 만든 후 FileStream 개체나 참조에 할당된 변수입니다.즉,당신은 개체는 처분되어야 합니다,하지만 그것을 참조하는 것은 잃어 스택에서 어딘가에...

다른 팁

면할 수 있도록 사용하지 않는 스레드가 있습니다.이 중단됩니다.문제 Thread.중단은 그것에서 일어날 수 있는(거의)모든 줄의 코드를 실행하고 있는"재미"동작(읽기:버).Intead 내가 선호하는 종료 시점에 확인하는 코드에 대한의 행사 또는 변수를 참조하는 경우 그것은 스레드 중지해야 실행과 정상적으로 종료됩니다.

반드시는 경우 종료된 이벤트가 예상한 다음 그것은 예외가 아닙(에 의해 엄격한 정의 용어는)그래서 그러므로 당신이 사용해야 하는 첫 번째 방법입니다.종료한하는 것을 보여줍니다.

는 예외는 유용하고 일부 경우에 필요한 그들이 할 수 있고 얻을 과도하게 사용되고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top