2012-06-01 3 views
2

죄송합니다. 제목이 조금 뚜렷하지 않으면 정말 옳은 말을 할 수 없습니다.다운로드 중 대화 상자 업데이트 중

I 사용자가 다운로드 여러 파일을 선택하고 다운로드를 시작하기 위해 "다운로드"버튼을 누르면 할 수있는 사용자 인터페이스 (의 WinForm)가 :

기본적으로, 내가 가지고있는 것은 다음과 같은 시나리오입니다. 모든 다운로드는 양식 잠금을 피하기 위해 비동기 적으로 처리됩니다. 그러나 양식에 "응답 없음"메시지가 표시되는 것을 원하지 않지만 사용자가 다운로드가 실행되는 동안 양식 필드를 수정할 수 없도록해야합니다.

이상적으로 사용자에게 다운로드 상태를 알려주는 모달 대화 상자를 생성하고 싶습니다 (모달 대화 상자를 제외하고는 파이어 폭스와 유사). 대화 상자가 활성화되어있는 동안 사용자가 부모 양식과 상호 작용하는 것을 중단하면서 사용자가 다운로드 진행 상태를 잘 볼 수 있도록 한 돌로 2 마리의 새를 죽입니다.

그러나 사용자에게 다운로드 진행에 대한 아이디어를 적절히 제공하려면 런타임 중에 대화 상자를 업데이트해야합니다. 이것은 내가 벽에 부딪힌 곳입니다. 내 현재 아이디어는 대화 상자 클래스의 일부 공개 메서드를 공개하여 파일이 완료되면 업데이트를 보내고 백그라운드 다운로드 스레드 내에서 호출 (적절한 대리자를 사용하여 컨트롤을 업데이트하는 등)

나는 내가 원하는대로 작동하지만,이 문제에 대한 더 우아한 해결책이 있는지 궁금해하고 있습니다. 대화 방식으로 제한되지 않는다고 생각합니다. 더 나은 대안을 제시 할 수있는 모든 접근 방식에 대해 열려 있습니다.

건배, J

답변

1

대안 1

당신은 BackgroundWorker 사용을 고려, 그것은 일을하기 위해 새로운 스레드를 설정하는 걸릴 수

도 진행하고보고하는 이벤트 기반 메커니즘을 제공 작업 취소를 요청하는 메서드입니다 (이 메서드를 사용하려는 경우에는 사용자가 결정합니다).

BackgroundWorker에 대한 작업을 설정하려면 DoWork 이벤트에 처리기를 연결하고 RunWorkerAsync()을 호출해야합니다.

대안이

또 다른 대안은 당신이 Reactive을 사용하여 결합 할 수있는 다운로드 진행 상황에 반응하는 메커니즘을 만들 IObservable<T>을 사용하는 것입니다.

나는 당신을 반응적으로 생각합니다. 당신은 UI를 해제 할 수있는 자유를 가지고 있다면 ... 당신은 진행 상태 표시 줄에

http://channel9.msdn.com/Blogs/codefest/DC2010T0100-Keynote-Rx-curing-your-asynchronous-programming-blues


를보고 할 수 :이 경우, 이것은 (내 생각에) 가능한 가장 좋은 소개 , 현재 및 대기중인 작업이있는 보조 양식 (사용자가 닫고 NotifyIcon으로 돌아가도록 할 수 있음)을 사용하십시오.

+0

다운로드 중에 UI를 사용 중지해야하므로 흔들림이 많지 않습니다. 이미 다운로드가 비동기 적으로 완료되면 발동되는 알림 이벤트가 있습니다. 제 질문은이 상황을 처리하는 가장 좋은 방법입니다. –

+0

IObserver/IObservable 인터페이스를 읽었을 때 마음에있는 것과 잘 작동하는 것처럼 보입니다. 감사! –

+0

@JasonLarke가 시간을내어 내가 연결된 비디오를 확인하십시오. 그만한 가치가 있습니다. – Theraot