이번 프로젝트에서 BackOffice를 사용하는 사용자 간에 메시지 공유와 서버와 클라이언트 간의 Real Message 수신, FTP File Upload 등의 통신 기능을 적용해야 한다.
그리고 메시지 수신에 따라서 사용자의 어플리케이션에 NotifyIcon 처리를 해 주어야 한다.
이런 저런 처리들을 가능하면 최대한 공통화를 하다 보니 Thread 가 난무한다. -_-+
그렇게 많은 상황들을 정리하면서 테스트를 하던 중에 갑자기 나타난 오류 메시지....
CLR에서 60초 동안 COM 컨텍스트 xxxxx 에서 COM 컨텍스트 xxxxx 로 전환하지 못했습니다. 대상 컨텍스트/아파트를 소유하는 스레드가 펌프 대기를 수행하지 않거나, Windows에서 메시지를 펌프하지 않고 매우 긴 실행작업을 처리하고 있는 것 같습니다. 이러한 상황은...
위의 오류의 내용을 유추하면 Thread 간에 전환이 제대로 처리되지 못하고 마치 무한루프와 같은 상태에 빠진 것으로 보인다.
잘 처리되던 것이 몇 가지를 추가한 후에 저런 오류를 뿜어내는 것으로 보아서 추가한 부분이 또 다른 Thread에서 연결되면서 발생하는 것이 아닌지 의심이 된다.
일단 구글의 검색에 따르면 디버그 모드에서만 발생한다고 정리해 논 글들이 많다. 하지만 얼마 전까지만 해도 되던 상태였으니 딱히 긍정이 되지는 않지만, 일단 처리 방식을 정리해 놓도록 한다.
Visual Studio > 디버그 > 예외 를 선택해서 예외 설정 창을 열고 Managed Debugging Assistants 목록을 클릭한 후에 "ContextSwitchDeadlock" 항목을 선택 해제하면 된다.
음~
일단 저렇게 처리해도 지금의 상황에서는 동일하게 문제가 발생한다. Debug 빌드가 문제일지 아니면 Thread 처리가 복잡하게 얽혀서 생기는 문제인지 좀 애매하다. ㅠㅠ
댓글
댓글 쓰기