2011-12-11 5 views
2

파일을 복사 할 때 탐색기와 마찬가지로 비동기 적으로 실행할 수없는 긴 프로세스가 있습니다. 진행 대화 상자가 있습니다. 대화 상자를 모달로 표시 한 다음 작업을 수행합니다 (파일을 복사하여 추상적으로 유지). 진행 대화 상자를 업데이트하고 Application.DoEvents()를 사용하여 메시지를 펌핑하여 응용 프로그램 메인 프레임을 페인팅 및 응답 가능하게 유지합니다.모달 진행 대화 상자가 열려있는 동안 "Application.DoEvents"를 호출해도 괜찮습니까?

대화 상자가 모달이므로 사용자는보기 또는 취소 이외의 작업을 수행 할 수 없습니다. 즉, 메뉴 항목을 선택하거나 단추를 클릭 할 수 없습니다.

나는 항상 재진입하려는 의도가 아닌 코드를 다시 입력 할 수 있기 때문에 Application.DoEvents가 극히 악조리라고 생각했습니다. 그러나이 경우에는 진행 대화 상자가 모달이므로 나쁜 또는 위험한 해결책 인 이유를 볼 수 없습니다.

나는 뭔가를 내려다 보지 않습니까, 아니면 Application.DoEvents를 사용하여 모달 대화 상자와 관련하여 합법적 인 메시지를 보내고 있습니까?

+1

적어도 백그라운드 스레드에서 실행할 수없는 이유는 무엇입니까? 백그라운드 작업자 만 사용하고 Control.BeginInvoke를 사용하여 UI를 업데이트하면됩니다. – BFree

+1

[일부] (http://stackoverflow.com/a/5183623/825024) [읽기] (http://stackoverflow.com/a/1115410/825024). – Otiel

답변

0

DoEvents의 제한된 사용과 관련하여 특별한 문제는 없습니다. 백그라운드 처리가 옵션이 아닌 경우 매우 제한된 상황에서 성공적으로 사용합니다.

0

일반적으로 응용 프로그램의 UI 스레드가 메시지를 보내줍니다. 모달 대화 상자가 자체 메시지 펌프를 실행한다고해도 예상 한대로 통화 동작을 유지하기위한 것일뿐입니다 (예 : 모달 대화 상자가 닫힐 때만 통화가 반환 됨). 모달 대화 자체를 처리 할 필요는 없습니다. ("오래된 새로운 것"블로그의 this blog post도 참조하십시오.)

따라서 그것은 보통 (UI 스레드에서 예를 들어 비 협조 처리) 디자인 문제를 표시하고 수도 원인 재진입에도 불구하고, 정말 하나 Application.DoEvents()를 호출하는 문제가되지 않습니다 경우 일부 창 메시지와 이벤트 핸들러는 서로를 트리거합니다.하지만 이는 대화 상자 방식과 관련이 없습니다.

관련 문제