Estoy intentando que el progreso de una barra de progreso cambie a medida que el progreso de descarga WebClient
cambia. Este código aún descarga el archivo aún cuando llamo al startDownload()
y la ventana se congela mientras descarga el archivo. Me gustaría que el usuario pueda ver el cambio de progreso a medida que se carga la pantalla de bienvenida. ¿Hay alguna manera de solucionar esto para que el usuario pueda ver el progreso del cambio progressBar2
?Descarga asíncrona de archivos con barra de progreso
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";
}
si la ventana se bloquea significa que la persona está descargando en el subproceso de la interfaz de usuario que se traduce en que su código es síncrono y no asíncrono. – Joakim
Estoy llamando 'startDownload()' a través de un trabajador en segundo plano que se ejecuta de forma asíncrona. Eso no debería causar que la ventana se congele, ¿verdad? –
No coloque un prefijo en sus títulos con "C#" y tal. Para eso son las etiquetas. –