Я пытаюсь изменить прогресс прогресса в процессе изменения хода загрузки WebClient
. Этот код все еще загружает файл, но когда я звоню startDownload()
, окно зависает, когда оно загружает файл. Я хотел бы, чтобы пользователь мог видеть изменение хода работы при загрузке заставки. Есть ли способ исправить это, чтобы пользователь мог увидеть ход изменения progressBar2
?Asynchronous File Download with Progress Bar
private void startDownload()
{
WebClient client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync(new Uri("http://joshua-ferrara.com/luahelper/lua.syn"), @"C:\LUAHelper\Syntax Files\lua.syn");
}
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
double bytesIn = double.Parse(e.BytesReceived.ToString());
double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
double percentage = bytesIn/totalBytes * 100;
label2.Text = "Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive;
progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
}
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
label2.Text = "Completed";
}
Если окно зависает, это означает, что человек загружается в потоке пользовательского интерфейса, что означает, что ваш код является синхронным, а не асинхронным. – Joakim
Я вызываю 'startDownload()' через фоновый рабочий, работающий асинхронно. Это не должно заставлять замораживать окно, верно? –
Пожалуйста, не прикрепите свои заголовки к «C#» и тому подобное. Для этого нужны теги. –