Ive는 Crystal Reports 뷰어를 시작하고 일부 보고서를 표시하는 C# 2.0 앱을 가지고 있습니다. 비주얼 스튜디오의 디버그 나 릴리즈 모드에서 이것을 실행하면 잘 돌아갑니다. Visual Studio 2005를 통해이 디버깅을하면 보고서가 나타납니다. 그런 다음 1 ~ 2 분 후 VS가 ContextSwitchDeadlock에서 괴롭힘을 당합니다. 디버깅 할 수 없도록 모든 호출 스택 프레임에 대해 심볼이로드되지 않았 음을 알려줍니다 .Crystal 보고서가 Visual Studio에 충돌 함
이것은 보고서가 다른 스레드에서 시작된다는 사실과 관련이 있습니다. 그 이유는 다소 복잡하지만, 중요 할 경우를 대비하여 설명하려고 노력할 것입니다.
우리는 백그라운드 스레드에서 실행되는 장기 실행 프로세스가 있습니다. 프로세스가 완료되면 보고서를 시작합니다. 보고서 뷰어 양식에서 Show (백그라운드 스레드)가 Show (비 모달)를 호출하면 즉시 종료되고 모든 보고서 양식이 즉시 삭제됩니다. 그래서 대신 보고서 당 하나의 자식 스레드를 시작하고 ShowDialog (모달)로 호출합니다. 그런 식으로 양식은 모두 겉으로는 모달이 아니지만 사용자가 마지막 하나를 닫으면 백그라운드 스레드에 자식 스레드가 없어 종료 할 수 있습니다.
이 말이 맞는가요? 왜 내가 ContextSwitchDeadlock MDA를 VS 안에 넣을지 아무도 모르겠지만 코드가 독립 실행 형일 때 예외가 발생하지 않습니까?