2008-09-25 1 views
4

그래서 지난 하루 동안 모달 대화 상자로 인해 발생하는 버그를 수정했습니다. Windows 메시지 펌프를 통해 서버와 통신하는 응용 프로그램에서 작업합니다. ShowDialog()를 사용하여 모달 폼을 표시하면 메시지 펌프가 차단되고 내 메시지가 처리되지 않지만 대기열에 빌드됩니다 (예상되는 동작).메뉴 항목의 클릭 이벤트를 통해 열린 모달 대화 상자가 모든 창 메시지를 처리하는 이유는 무엇입니까?

그러나 최근에는 메뉴 항목의 클릭 이벤트를 통해 모달 폼을 열면 메시지가 기본 폼으로 펌핑되고 ​​처리되는 것으로 나타났습니다. 누구도 메뉴 항목의 클릭 이벤트를 통해 모달 폼이 표시 될 때 이러한 메시지가 차단되지 않는 이유를 알고 있습니까?

편집 : 나는 C#을 사용하고 있다는 것에 유의해야합니다. 어때? 아무도이 질문에 답할 수 없으면 누구도이 조사 방법을 제게 알려 줄 수 있습니까? 내가 생각할 수있는 유일한 것은 호출 스택을 보는 것입니다. 불행히도 아직 아무 말도하지 않았습니다.

답변

0

click 이벤트 또는 다른 방법으로 ShowDialog()를 호출합니까?

1

예, 메뉴 항목의 click 이벤트에서 ShowDialog()를 호출하려고합니다. 이 경우 메시지는 모달 대화 상자를 통해 기본 폼으로 펌핑됩니다.

0

어떤 종류의 메뉴 컨트롤을 사용하고 있습니까? 기본 폼이 실행되는 스레드와 별도의 스레드에서 실행될 수 있습니까?

0

@Chris : 표준 MenuStrip 컨트롤 만 사용하고 있습니다. 별도의 스레드에서 실행 중이면 양식이 모달로 표시되는 방식에 관심이 있습니다. 메시지 대기열을 차단하지 않는 별도의 스레드에서 대화 상자를 표시하는 방법을 실험했지만 부모로 기본 양식을 지정할 수 없기 때문에 모달 형식이 아닙니다.

1

대화 상자의 소유자/부모를 예상되는 메시지 펌핑 동작을 나타내는 대화 상자로 설정하십시오.

1

일반적으로 클라이언트 UI 은 긴 서버 작업을 위해을 차단해서는 안됩니다. .Net은 매우 편리합니다.은 BackgroundWorker 스레드를 사용하여 서버 작업을 수행합니다. 예를 들어 다음 게시물을 참조하십시오. Multi Threaded Import

예제는 VB이지만 C# 예제의 링크를 따라갈 수 있습니다.

+0

감사합니다. 내가 설명한 문제는 실제로 나 (물론)에 의해 발생했습니다. :). 내가 맡은이 프로젝트에서 나는 재미있는 일들을 진행했다. –