2013-07-15 3 views
0

메시지가 표시 될 때 Delphi ShowMessage 또는 MessageDlg를 사용하면 프로그램이 버튼을 클릭 할 때까지 기다리고 프로그램 자체가 차단되는 것을 원치 않습니다. 프로그램이 검색하는 위치에 메시지를 표시해야하지만 메시지가 표시되는 한 검색이 시작되지 않습니다 .. 어떻게해야합니까?Delphi : 메시지가 프로그램을 차단하는 이유는 무엇입니까?

감사합니다, 잭

ShowMessage('Sto ricercando . . .'); 
if (cartellaSorgente[Length(cartellaSorgente)] <> '\') then 
begin 
// do the research 
end; 
+0

Crystal Ball이 오늘 휴일로 코드를 게시하십시오 ... – ElmoVanKielmo

+0

다른 문제 ("물건을 검색하는 동안 내 응용 프로그램이 정지 된 것처럼 보임")을 감히합니다. 비 차단 메시지 박스를 사용하고 검색이 메인 스레드에서 일어나길 원한다면 'TThread' 클래스를 살펴보고 검색을 처리하는 두 번째 스레드를 만들고 마지막으로 종료되기 전에 메인 스레드의 일부 객체에 결과를 추가해야합니다. –

+0

ShowMessage 또는 MessageDLG를 사용해야하는 경우 여기에서 아이디어를 얻을 수 있습니다. http://stackoverflow.com/questions/15696885/why-does-a-messagebox-not-block-the-application-on-a-synchronized -thread – bummi

답변

5

ShowMessage 표시 모달 대화 상자를 표시합니다. 즉, 대화 상자가 닫힐 때까지 ShowMessage에 대한 호출이 반환되지 않습니다.

문제는 UI를 차단하지 않고 장기 실행 작업을 실행하려는 것입니다. 이를 달성하는 방법은 장기간 실행되는 작업 인 검색을 별도의 스레드에 넣는 것입니다. 검색 스레드에서 UI 스레드로 메시지를 보내 UI가 사용자에게 진행 상황을 알리도록합니다.

관련 문제