2011-01-30 8 views

답변

0

정상적인 동작입니다. 아마도 응용 프로그램이 종료되지 않도록 예외를 잡기를 원할 것입니다.

1

예 그렇습니다. 자세한 내용은이 유사 question을 참조하십시오.

1

이것은 CLR v2.0의 일반적인 동작입니다. 여기에 MSDN 게시물이 있습니다. 프로세스가 종료되는 것을 피하기 위해 다음과 같은 것을 사용할 수 있습니다.

<legacyUnhandledExceptionPolicy enabled="1"/> 

권장하지 않습니다.

4

기대했던 동작은 이전 1.1의 동작이었습니다. 일반적으로 나쁜 생각이었습니다. 모든 스레드에서 처리되지 않은 예외가 발생하면 프로세스가 일관성없는 상태로 유지 될 수 있습니다. 공유 데이터에 대한 업데이트가 부분적으로 적용될 수 있습니다. 런타임에는이 시나리오를 안전하게 처리하거나이 시나리오를 어떻게 처리할지 알 수있는 정보가 없으므로 스레드를 종료하고 프로그램을 종료하는 데 더 많은 돈을 씁니다. 이상한 상태. 이로 인해 리소스 누출, 중단, 데이터 손상 등이 발생할 수 있습니다. 처리되지 않은 예외가있는 프로세스를 종료하면 프로세스가 종료됩니다. 프로세스가 종료됩니다.

7

.NET 응용 프로그램의 기본 동작은 처리되지 않은 예외가 발생할 때마다 종료됩니다. 예외가 처리되지 않으면 프로그램이 알 수없고 불안정한 상태가됩니다. 백그라운드 스레드에서 발생했기 때문에 오류가 나머지 프로그램에 영향을 미치지는 않습니다. 그 상황에서 런타임을위한 가장 신중한 과정은 프로그램을 덤프하는 것입니다.

AppDomain.CurrentDomain.UnhandledException을 살펴보면 처리되지 않은 예외를 잡아 내고 그에 따라 대응할 수 있습니다. 더 나은 해결책은 스레드 proc을 try...catch으로 감싸는 것입니다. 그러나 처리하는 방법을 알고있는 예외 만 처리해야합니다. 이렇게 : 당신이 정말 메인 프로그램으로 전파 할 않는 예외를 마스크 할 수 있기 때문에

void MyThreadProc() 
{ 
    try 
    { 
     // ... 
    } 
    catch 
    { 
     // handle all exceptions 
     // This is a BAD idea 
    } 
} 

는 정말 좋은 생각입니다.

관련 문제