2009-09-24 4 views
1

Ive는 Crystal Reports 뷰어를 시작하고 일부 보고서를 표시하는 C# 2.0 앱을 가지고 있습니다. 비주얼 스튜디오의 디버그 나 릴리즈 모드에서 이것을 실행하면 잘 돌아갑니다. Visual Studio 2005를 통해이 디버깅을하면 보고서가 나타납니다. 그런 다음 1 ~ 2 분 후 VS가 ContextSwitchDeadlock에서 괴롭힘을 당합니다. 디버깅 할 수 없도록 모든 호출 스택 프레임에 대해 심볼이로드되지 않았 음을 알려줍니다 .Crystal 보고서가 Visual Studio에 충돌 함

이것은 보고서가 다른 스레드에서 시작된다는 사실과 관련이 있습니다. 그 이유는 다소 복잡하지만, 중요 할 경우를 대비하여 설명하려고 노력할 것입니다.

우리는 백그라운드 스레드에서 실행되는 장기 실행 프로세스가 있습니다. 프로세스가 완료되면 보고서를 시작합니다. 보고서 뷰어 양식에서 Show (백그라운드 스레드)가 Show (비 모달)를 호출하면 즉시 종료되고 모든 보고서 양식이 즉시 삭제됩니다. 그래서 대신 보고서 당 하나의 자식 스레드를 시작하고 ShowDialog (모달)로 호출합니다. 그런 식으로 양식은 모두 겉으로는 모달이 아니지만 사용자가 마지막 하나를 닫으면 백그라운드 스레드에 자식 스레드가 없어 종료 할 수 있습니다.

이 말이 맞는가요? 왜 내가 ContextSwitchDeadlock MDA를 VS 안에 넣을지 아무도 모르겠지만 코드가 독립 실행 형일 때 예외가 발생하지 않습니까?

답변

0

나는 당신이 당신 자신의 질문에 대답했다고 생각합니다 ... 그것은 당신이 어떻게 다른 스레드에서 그것을 실행하는지와 관련이 있습니다.

1

당신에게 C renamining 시도 : \ 임시 \ 디렉토리 - 알고 문제가 그 C에서 XML 파일이있는 경우 : Crystal Reports를 충돌하고 당신이 그들을 열 질수 \ \ 임시 ..

0

삭제하거나 이동 c :/temp 폴더에있는 모든 .xml 파일 (있는 경우). 이로 인해 데이터베이스 전문가가 충돌합니다.

0

같은 문제가 있습니다. 데이터베이스 전문가가 일부 XML 파일이 c : \ temp 디렉토리에 있기 때문에 VS가 충돌하도록하는 것으로 알려져 있습니다. 첫 번째 옵션은 c : \ temp 디렉토리를 비우는 것입니다 (나를 위해 일했습니다). 둘째로 임시 디렉토리 이름을 "MyTemp"또는 비슷한 이름으로 바꿀 수 있습니다. 그리고 마지막으로 클라이언트 버전이 아닌 4.0 프레임 워크를 사용하도록 프로젝트를 설정할 수 있습니다.

P.S : @John Cruz 아니, 그는 프로젝트에서 별도의 스레드로 작동하지 않으며 같은 ContextSwitchDeadlock 오류가 발생했습니다.

관련 문제