Monitorare i download in background nelle Universal App

di Alessio Leoncini, in WinRT 8.1,

Nello script #95 abbiamo visto com'è possibile eseguire il download di file remoti in background, grazie a BackgroundDownloader, presente nel namespace Windows.Networking.BackgroundTransfer.

I download in background escono dal ciclo di vita dell'app, quindi dobbiamo monitorarli grazie al metodo GetCurrentDownloadsAsync di BackgroundDownloader.

Il metodo restituisce una collezione di DownloadOperation di cui possiamo recuperare l'IAsyncOperationWithProgress con AttachAsync e staccare il suo task con il noto overload AsTask.

IReadOnlyList<DownloadOperation> downloads = await BackgroundDownloader.GetCurrentDownloadsAsync();
foreach (var download in downloads)
{
  var progress = new Progress<DownloadOperation>(OnProgress);
  try
  {
    IAsyncOperationWithProgress<DownloadOperation, DownloadOperation> downloadOperation = download.AttachAsync();
    await downloadOperation.AsTask(progress);
  }
  catch (Exception ex)
  {
    status.Text = ex.Message;
  }
}

Al metodo AsTask possiamo passare come parametro un oggetto di tipo Progress, che ci permette di controllare lo stato del download in tempo reale.

private void OnProgress(DownloadOperation operation)
{
  var uri = operation.RequestedUri;
  status.Text = operation.Progress.Status.ToString();
  progress.Text = (operation.Progress.BytesReceived * 100 / operation.Progress.TotalBytesToReceive).ToString("0");
}

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi