1

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 ]
4

1 に答える 1

2

ドキュメントによると、DownloadStringAsync は進行状況を報告しません。WebClient.DownloadProgressChanged Eventのドキュメントを参照してください。

于 2009-08-01T13:38:37.437 に答える