2011-01-05 3 views
1

우리의 (Out Of Browser) Silverlight 응용 프로그램이 사용자에 의해 종료 될 때 별도의 스레드에서 로그 파일에 쓰려고 할 때 때때로 AccessViolationException이 발생합니다. Silverlight 런타임이 종료되고 종료 시퀀스 중에 IO 작업이 수행되지 않을 것으로 예상됩니다.Silverlight에서 AccessViolationException을 catch하는 방법은 무엇입니까?

AccessViolationException을 잡아 내서 무시하려고하면 HandleProcessCorruptedStateExceptions을 붙잡아서 메서드를 장식해야하고 실제 예외 처리하는 예외를 잡아 내야합니다.

예외를 잡거나 적어도 사용자로부터 숨기는 더 강력한 방법이 있습니까?

+0

AV를 처리 할 수 ​​없으므로 스레드가 종료되었습니다. 진짜 문제를 해결하십시오. –

+1

@Hans, "진짜 문제"는 Silverlight입니다. 내가 셧다운시에 무엇을하는지 확신 할 수는 없지만, 그것이 무엇이든 상관 없다. – SoftMemes

+0

로깅을 수행하는 코드를 게시 할 수 있습니까? 이미 쓰기 위해 열어 둔 파일에 로그를 추가하려고하는 것 같습니다. –

답변

0

매우 비슷한 상황이 발생했습니다. 사용자가 앱을 종료하면 AccessViolationException이 발생합니다. 원인은 내가 백그라운드 스레드에서 작업을하고 있으며 코드가 NLog를 사용하여 로그 할 것이기 때문입니다.

결국 NLog는 FileStream 생성을 시도하고 Silverlight 런타임이 종료되어 오류가 발생합니다.

Visual Studio (ctrl + alt + e)에서 예외가 발생할 때 중단 기능을 켜면 해당 지점을 찾아내는 데 도움이됩니다.

이 문제를 해결 한 후에는 앱이 종료되도록 허용하기 전에 백그라운드 스레드를 모두 중지해야합니다. MEF를 사용하고 있었기 때문에 컨테이너를 처분하고 필요한 경우 IDisposable을 구현할 수 있기 때문에 이것은 나에게 나쁘지 않았습니다.

관련 문제