سؤال

و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 الحدث .

scroll top