Как сделать прогрессбар для загрузки строки с помощью веб-клиента в wpf ..? - PullRequest
0 голосов
/ 27 июля 2011

Я сделал небольшое приложение, которое помогает загружать HTML-содержимое веб-страниц. Я сделал прогрессбар, и я не могу получить какие-либо значения или какие-либо изменения, используя обработчик событий изменения изменения загрузки файла. Вот мой код ..

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    progressBar1.Maximum = 100;
    WebClient wb = new WebClient();
    wb.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wb_DownloadProgressChanged);
    wb.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wb_DownloadStringCompleted);
    wb.DownloadStringAsync(new Uri("http://www.google.com"));
}

void wb_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    string htmldoc = e.Result;
}

void wb_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    progressBar1.Value = e.ProgressPercentage;
}

Когда я запускаю этот код, e.progresspercentage всегда равен 0, а когда загрузка завершается, он становится равным 100. Поэтому я не могу сделать прогрессбар работоспособным. Может кто-нибудь сказать мне, что здесь не так ..? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 28 июля 2011

Не уверен в этом, но я подозреваю, что методы DownloadXXX зависят от общего размера, о котором сообщается заранее, чтобы сообщить о прогрессе.Так же, как пассивная загрузка по FTP не будет сообщать об общем размере загрузки заранее, возможно, веб-сервер google.com не возвращает соответствующие заголовки, указывающие ожидаемое количество байтов, которые будут отправлены по конвейеру.

1 голос
/ 27 июля 2011

Вы не можете, DownloadStringAync не вызывает событие DownloadProgressChanged .Вместо этого вы можете использовать DownloadDataAsync , а затем преобразовать его в строку, используя что-то вроде System.Text.Encoding, , как указано здесь .

0 голосов
/ 28 июля 2011

Согласно документации, DownloadStringAsync не сообщает о прогрессе.См. Документацию о событии WebClient.DownloadProgressChanged .

Также вы хотите использовать

using System.ComponentModel;

client.DownloadStringCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
...