[DEVEXPRESS/WINFORM] RichEditControl 클래스 : COPY/PASTE 편집시 관리 디버깅 도우미 "DisconnectedContext" 오류 처리하기
DevExpress/WinForm 2018. 5. 12. 09:12RichEditControl에서 일정 크기의 서식을 갖는 문자열을 복사하고 붙여넣기 하는 과정에서 COM 에러가 발생하는데 AppDomain 클래스의 UnhandledException 이벤트나 Application 클래스의 ThreadException 이벤트에도 잡히지 않고 프로그램이 다운되는 경우가 자주 발생했다.
▶ 예외 메시지
관리 디버깅 도우미 'DisconnectedContext' 메시지=관리 디버깅 도우미 'DisconnectedContext' : '다음 오류로 인해 이 RuntimeCallableWrapper에 대한 COM 컨텍스트 0x65571548(으)로의 전환이 실패했습니다. 개체가 서버에 연결되지 않았습니다. (예외가 발생한 HRESULT: 0x800401FD (CO_E_OBJNOTCONNECTED)). 일반적으로 이 RuntimeCallableWrapper가 생성된 COM 컨텍스트 0x65571548의 연결이 끊어졌거나 다른 작업을 수행하고 있어 컨텍스트 전환을 진행할 수 없기 때문입니다. COM 구성 요소에 대한 요청을 처리하는 데 프록시가 사용되지 않으며 COM 구성 요소를 직접 호출합니다. 이로 인해 손상 또는 데이터 손실이 발생할 수 있습니다. 이 문제를 방지하려면 응용 프로그램 내부의 COM 구성 요소를 나타내는 RuntimeCallableWrappers의 작업이 응용 프로그램에서 완료될 때까지 모든 COM 컨텍스트/아파트/스레드를 활성화된 상태로 유지하고 컨텍스트 전환에 사용할 수 있도록 하십시오.'
▶ 발생 원인
DevExpress의 답변을 찾아보면 DisconnectedContextException은 다른 어플리케이션에 의해 클립보드가 잠길 때 발생한다고 하는데, 예외를 발생시키기 위해 RichEditControl에서 Copy & Paste 작업을 반복하고 있으면 디버깅 창에서 수시로 스레드가 종료되는 것을 볼 때, 이 과정에서 클립보드가 잠겨지는 것으로 추정된다.
▶ 조치 사항
1. [Visual Studio]에서 소스 코드를 로드한다.
2. [CTRL] + [ALT] + [E] 키를 눌러 [예외 설정] 창을 표시한다.
3. Managed Debugging Assistants 항목에서 아래 항목들을 체크 해제한다.
- ContextSwitchDeadlock
- DisconnectedContext
4. 소스 코드를 다시 빌드한다.
댓글을 달아 주세요