c# windows-phone-8 async-await background-transfer

c# - Espere hasta que la descarga haya finalizado Windows phone



windows-phone-8 async-await (1)

¿Cómo puedo esperar hasta que la operación de descarga haya finalizado y quiero devolver un estado verdadero o falso a la interfaz de usuario? Ahora estoy usando Webclient para descargar una imagen como esta

private async Task SaveCoversAsync(string CoverImageUrl) { WebClient getImageClient = new WebClient(); getImageClient.OpenReadCompleted += new OpenReadCompletedEventHandler(getImageClient_OpenReadCompleted); getImageClient.OpenReadAsync(new Uri(CoverImageUrl), CoverImageUrl); } private async void getImageClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { try { var storeFile = IsolatedStorageFile.GetUserStoreForApplication(); string coverpath = string.Concat("filename.png"); using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(coverpath, System.IO.FileMode.Create, FileAccess.Write, FileShare.Write, storeFile)) { byte[] buffer = new byte[1024]; while (e.Result.Read(buffer, 0, buffer.Length) > 0) { stream.Write(buffer, 0, buffer.Length); } } } catch (Exception exe) { }

}

El problema es que no puedo usar aguardar, ya que estoy usando el evento OpenReadCompleted. ¿Cómo puedo convertir el codebloack anterior usando WebClient.DownloadFileAsync? ¿O hay alguna manera de esperar hasta que la descarga haya terminado y el estado de devolución?


Si bien puede usar HttpClient o WebClient para descargar archivos de manera asincrónica, solo debe hacerlo para archivos pequeños (por ejemplo, páginas o fuentes). Hacerlo requiere que el usuario mantenga su aplicación abierta durante el tiempo que la transferencia de archivos lo requiera. Eso significa que no cierra el teléfono, cambia a otra aplicación ni hace nada que haga que el sistema operativo detenga su aplicación.

El usuario no estará contento y su código tendrá que manejar descargas incompletas e interrumpidas.

Es mucho mejor usar Traslados de archivos de fondo . Básicamente, le dice al sistema operativo qué archivo desea descargar, dónde desea ubicarlo y, si es posible, el sistema operativo se encarga de descargarlo en segundo plano, proporcionando comentarios sobre el proceso de la transferencia. El sistema operativo también verifica el estado de la conexión celular o WiFi.

Consulte la muestra en Cómo implementar transferencias de archivos de fondo para Windows Phone para ver una aplicación de dos páginas que crea nuevos objetos BackgroundTransferRequest y luego realiza un seguimiento de su progreso.

El código necesario es bastante simple. Usted crea un nuevo objeto BackgroundTransferRequest , establece las rutas y preferencias (por ejemplo, utiliza celular o no) y lo pasa a BackgroundTransferService.Add para su ejecución:

var transferRequest = new BackgroundTransferRequest(transferUri); transferRequest.Method = "GET"; transferRequest.DownloadLocation = downloadUri; if (wifiOnlyCheckbox.IsChecked == false) { transferRequest.TransferPreferences = TransferPreferences.AllowCellular; } BackgroundTransferService.Add(transferRequest);

Para seguir el progreso, necesita manejar los eventos de la solicitud , TransferProgressChanged y TransferStatusChanged