문제

VS 2008 SP1

DownloadStringAysnc를 사용하고 있습니다.그러나 ProgressChanged 이벤트는 문자열이 다운로드될 때까지 진행 상황을 표시하지 않습니다.

큰 파일에 포함된 문자열을 다운로드하려고 해도 마찬가지입니다.프로그램은 응답을 유지하므로 프로그램이 뭔가를 하고 있다는 것을 알 수 있습니다.그러나 진행이 완료되면 ProgressChanged 이벤트가 발생합니다.

나는 이것을 ProgressChanged와 DownloadStringCompleted가 서로 즉시 실행되는 것으로 알고 있습니다.하지만 파일이 상당히 크기 때문에 잠시 멈춰야 합니다.

이것이 제가 현재 사용하고 있는 코드 조각입니다.그리고 아래 출력.이상한 점은 e.progresspercentage가 100%라는 점입니다.그리고 두 번이나 전화를 받은 것 같습니다.

어떤 조언이라도 감사드립니다.

Output in the progress changed event
Progress changed Version userstate: [ Version1 ]
progressBar1.Value [ 100 ]
Progress changed Version userstate: [ Version1 ]
progressBar1.Value [ 100 ]
Completed Version userstate: [ Version1 ]


private void UpdateAvailable()
        {
            WebClient wbCheckUpdates = new WebClient();
            wbCheckUpdates.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wbCheckUpdates_DownloadProgressChanged);
            wbCheckUpdates.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wbCheckUpdates_DownloadStringCompleted);
            DownloadFiles df = new DownloadFiles();
            string webServerURL = df.webServerPath;

            wbCheckUpdates.DownloadStringAsync(new Uri(Path.Combine(webServerURL, "version.txt")), "Version1"); 
        }




void wbCheckUpdates_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            Console.WriteLine("Progress version changed userstate: [ " + e.UserState + " ]");
            progressBar1.Value = e.ProgressPercentage;
            Console.WriteLine("progressBar1.Value [ " + this.progressBar1.Value + " ]");
        }

void wbCheckUpdates_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            Console.WriteLine("Completed version userstate: [ " + e.UserState + " ]");
        }

=========== DownloadDataAysnc를 사용하여 편집됨 ================

wbCheckUpdates.DownloadDataAsync(new Uri(Path.Combine(webServerURL, "version.txt")), "Version1");


void wbCheckUpdates_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        {
            byte[] result = e.Result;           
            Console.WriteLine("Completed data: [ " + System.Text.ASCIIEncoding.Default.GetString(result) + " ]");
        }

결과는 동일합니다.

Progress changed Version userstate: [ Version1 ]
progressBar1.Value [ 100 ]
Progress changed Version userstate: [ Version1 ]
progressBar1.Value [ 100 ]
Completed data: [ 1.0.11 ]
도움이 되었습니까?

해결책

설명서에 따르면 DownloadStringAsync는 진행 상황을 보고하지 않습니다.의 문서를 참조하세요. WebClient.DownloadProgressChanged 이벤트.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top