2011-02-07 1 views
2

Windows 대기열을 만들고 SQL 대기열의 항목을 모니터링하는 Windows Form 앱이 있습니다. 무언가가 나타나면 ActiveX 컨트롤이 포함 된 작업을 수행하기 위해 다른 스레드를 시작하는 다른 Form을 여는 스레드가 생성됩니다. 작업이 끝나면 양식에서 제거하고 처분하고 가비지 수집기를 호출합니다. 그렇다면 Close() (스레드에 있기 때문에) 대리자를 사용하여 호출합니다.
여기에서 문제가 시작됩니다. 내 개발자 상자에서 모든 것이 작동합니다. 자식 양식이 사라지고 내가 시작한 기본 양식이 남아 있습니다. 그러나 Windows 2003 Server 상자에서 실행하려고하면 작동하지 않습니다. 아이 양식은 사라지지 않습니다. 얼어 버린다. 나는 그것을 움직일 수 있지만 닫으려고하면 "끝내기"대화 상자가 열립니다 (기본 양식도 멈추고 버튼을 클릭하면 "응답 없음"이 표시됨).
ChildForm_FormClosed에서 로깅을 시도했는데 이벤트 로그에 항목이 표시 될 수 있으므로 닫힌 것으로 생각 될 때와 실제로 닫힐 때 어딘가에 달라 붙을 수 있습니다 ...?Windows Form 프로덕션 환경에서 하위 폼을 닫지 않는 ActiveX 컨트롤이있는 응용 프로그램

이 원인은 무엇입니까?
ActiveX 컨트롤이 컴퓨터에 제대로 설치되지 않았지만 응용 프로그램의 해당 부분이 작동하고 컨트롤이 이미 삭제 된 후에야 고정 될 수 있다고 생각했습니다.

+0

윈도우의 스레딩 요구 사항을 위반하면 꽤 표준적인 교착 상태가 발생합니다. 누군가 당신을 위해 이것을 디버깅하기를 원하면 파일 공유 서비스에서이 동작을 나타내는 작은 repro 프로젝트를 게시해야합니다. –

답변

0

제 3 자 ActiveX 컨트롤에 문제가 있음이 드러났습니다. 그것은 말했을 때 닫히고 싶지 않은 버그가있었습니다.

관련 문제