2010-04-23 2 views
2

최근 C#을 사용하여 WinForms에서 프로그래밍을 시작했습니다. 폴더와 하위 폴더를 검색하고 텍스트 상자에 상태 정보를 표시해야하는 것과 같은 요구 사항이 있습니다. -상태 메시지를 텍스트 상자에 비동기 적으로 씁니까?

"C : \ Windows"...
찾을 수 8 개 파일 ... "D : \ 온도"에
복사 파일 8 일 ...

나는 모든 검색 및 물건을하는 방법이있다. 텍스트 상자에 상태 메시지 (위와 같은)를 주기적으로 표시하는 방법을 모르겠습니다. 현재 양식은 메소드가 완료 될 때까지 대기하고 모든 메시지를 한 번에 표시합니다. 방법이 진행됨에 따라 하나씩 표시되기를 바랍니다.

미리 감사드립니다.

답변

1

은 BackgroundWorkerThread와 ReportStatus 함수를 사용합니다. 그러면 검색이 이루어지는 동안 UI가 응답하게됩니다.

1

별도의 스레드에서 검색을 수행하는 방법을 실행하십시오 (아직 수행하지 않은 경우). async delegate features in .NET을 사용하면 매우 쉽습니다.

그런 다음 Control.BeginInvoke()을 사용하여 작업자 스레드의 텍스트 상자에 쓸 수 있습니다. UI 컨트롤에 대한 액세스가 단일 UI 스레드에 적합하므로이 작업을 수행해야합니다.

background worker thread을 만들고 ReportProgress 메서드를 사용하여 업데이트를 UI에 알릴 수도 있습니다. 이 접근법 중 fairly complete example을 다운로드하여 검토 할 수 있습니다.

2

이 문제를 올바르게 해결하려면 검색 기능을 백그라운드 스레드에서 실행해야합니다. 검색이 UI 스레드에서 발생하면 디스플레이에 대한 업데이트가 차단되어주기적인 상태 메시지가 표시되지 않습니다.

WinForms 응용 프로그램에서이 작업을 수행하는 가장 쉬운 방법은 BackgroundWorker을 사용하는 것입니다. 백그라운드에서 작업을 실행하고 진행률 정보를 UI 스레드로 반환하기위한 최소한의 지원이 있습니다. 또한 솔루션을 시작하는 데 필요한 온라인 자습서가 많이 있습니다.

관련 문제