2011-07-27 3 views
0

레이블 및 진행률 막대가있는 WPF 폼이 있습니다. 양식이로드 되 자마자 원격 서버에서 다운로드가 시작되지만 양식이 정지되고 올바르게 렌더링되지 않습니다. 마지막 게시물에서 누군가 파일을 다운로드하기 위해 FileAsync를 사용하도록 제안했지만 써드 파티 FTP 라이브러리를 사용하고 있습니다. 이 라이브러리에는 DownloadFileAsync 메서드가 있지만 여전히 폼 고정 문제가 지속됩니다.Notifier 클래스를 사용하여 WPF 폼의 컨트롤 바인딩

또한 DoEvents 함수를 이와 같이 만들었지 만 인터페이스가 중단되지 않습니다.

private void DoEvents() 
{ 
    Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, 
                new Action(delegate { })); 
} 

또 다른 접근 방식으로 INotify 유형의 것을 사용하고 있습니다.

(1) 다운로드 파일 방법을 다른 클래스 (예 : DownloaderClass)로 이동하십시오.

(2) MainWindow가로드 될 때 별도의 스레드를 만들고 Downloader 클래스에서 Download 메서드를 호출하십시오.

(3) 다른 클래스 (예 : NotifierClass)를 정적 클래스로 만듭니다.

DownloadedBytes,

CurrentFileName 상기 DownloaderClass에

(4) DownloadFile 방법 NotifierClass의 속성을 계속 업데이트 :이 클래스는 다음과 같은 속성을 포함한다.

MainWindow에 ProgressBar와 몇 개의 레이블 컨트롤을 연결하여 Notifier 클래스의 이러한 속성으로 업데이트를 유지하려고합니다.

이 방법이 효과가 있습니까? NotifierClass가 MainWindow에 상태 업데이트를 보내는 방법?

저는 VS-2010 Express를 사용하고 있습니다.

답변

1

Notifier 클래스를 건너 뛰고 다운로드 클래스에 속성을 넣습니다. 다운로드 클래스가 INotifyPropertyChanged를 구현하는지 확인하십시오.

다운로드 방법에서 BackgroundWorker를 사용하여 코드를 실행할 수 있습니다. Backgroundworkers ReportProgress 메서드와 이벤트 호출을 사용하면 완료 될 때 UI 스레드에서 코드를 실행하고 완료 될 때 % complete 속성을 업데이트 할 수 있습니다.

그러면 다운로드 클래스를 WPF 양식에 바인딩하면됩니다.

관련 문제