2016-10-18 3 views
1

나는 당황합니다. AccessViolationException은 타사 라이브러리에서 무작위로 발생시킵니다. 안전하게 무시할 수 있으므로 [HandleProcessCorruptedStateExceptions] 속성에 호출하는 메서드를 here으로 래핑합니다. 내가 .NET 프레임 워크 4.6.2 내가 놓친 수있는 어떤 비주얼 스튜디오 2015 업데이트 3을 사용하고 enter image description hereHandleProcessCorruptedStateExceptions에도 불구하고 AccessViolationException이 catch되지 않았습니다.

:

그러나, 나는 여전히 예외를보고하고 아래에 보이는대로 제기하기?

+0

[HandleProcessCorruptedStateExceptions]는 전달되는 개체가 무엇이든 작동해야합니까? 어떻게 중요할까요? –

+1

음, 기다려. 예외로 인해 CSE가 정상적으로 프로그램을 종료하지 않았습니다. 당신은 속성을 가지고 예외를 처리하겠다고 약속했으나하지 않았습니다. 속성을 남용하지 않도록주의하십시오. 그러면 해당 타사 라이브러리에 다시 전화 할 수 없습니다. 따라서 적절한 오류 보고서 (AppDomain.UnhandledException 이벤트 구독)로 프로그램을 종료하거나 해당 라이브러리에 대한 추가 호출을 억제하는 정적 bool 변수를 설정해야합니다. 디버거는 이벤트가 발생하기 전에 항상 단계별로 실행됩니다. –

+0

@HansPassant 당신은 틀린 것입니다! 사실, 당신이 생각하기에, 가장 현명한 사람들 중 하나이기 때문에 이것은 거의 과장된 것이 아닙니다.)'AccessViolationException' 후에 프로세스를 종료하는 것을 제외하고는 아무것도 더 이상 안전하지 않습니다. OP는 당신이이 예외를 무시하는 것이 안전 할 것이고, 나는 그것을 존중하기를 원했기 때문에 나는 당신의 예방 경고를 언급하지 않았다. (나는 그가 예외에 대한 이유를 이미 분석했다고 생각했다.) – haindl

답변

1

주위에 table.Start()을 삽입하는 것을 잊었습니다.

[HandleProcessCorruptedStateExceptions] 을 잡으려면 확실히 try/catch이 필요합니다.

그래서 코드는 다음과 같아야합니다

[HandleProcessCorruptedStateExceptions] 
private static void StartTable(Table table) { 
    try 
    { 
     table.Start(); 
    } 
    catch (AccessViolationException) 
    { 
     // Ignore 
    } 
} 

당신은 참조에 대한 here 또는 here 좀 걸릴 수 있습니다.

+0

고마워! 'try/catch' 블록을 포함했지만'StartTable' 메서드를 호출하는 방법에 포함 시켰습니다.이 메서드는 충분하지 않을 가능성이 큽니다. –

+1

@ErwinMayer 환영합니다! :-) 네,'try/catch'는'[HandleProcessCorruptedStateExceptions]'가 설정된 메소드에 직접 있어야합니다. 어떤 종류의 대표도 CLR 관점과는 별개의 메서드입니다. – haindl

관련 문제