【问题标题】:How to View the downloaded file When another download is in progress using Xamarin Android如何在使用 Xamarin Android 进行另一次下载时查看下载的文件
【发布时间】:2017-06-11 06:06:24
【问题描述】:

我正在使用 Xamarin android 实现一个移动应用程序。我已经实现了一个代码,可以通过单击按钮下载.PDF 和 .Mobi 文件。我使用了下面的代码。

  ...
        await Task.WhenAll(DownloadPDF(), DownloadMobi());
    }

    private async Task DownloadPDF()
    {
        var httpclient = new HttpClient(new AndroidClientHandler());
        using (var stream = await httpclient.GetStreamAsync("http://files/file.pdf"))
        using (var file = System.IO.File.Create("path/to/file.pdf"))
        {
            await stream.CopyToAsync(file);
            await file.FlushAsync();
        }
    }

    private async Task DownloadMobi()
    {
        var httpclient = new HttpClient(new AndroidClientHandler());

        using (var stream = await httpclient.GetStreamAsync("http://files/file.mobi"))
        using (var file = System.IO.File.Create("path/to/file.mobi"))
        {
            await stream.CopyToAsync(file);
            await file.FlushAsync();
    }
}

它同时下载两个文件。我想先下载PDF文件。下载 PDF 文件后,按钮文本应从“下载”更改为“查看 PDF”。单击查看 PDF 时,文件应在 PDF 阅读器中打开。移动文件下载应在此过程后开始,下载应在后台进行。 有人可以提出您的想法来实现这一目标吗?

【问题讨论】:

  • 嗨。恐怕这还不够信息。你都尝试了些什么?你的其余代码在哪里?

标签: android file xamarin httpclient


【解决方案1】:

由于您没有显示任何 UI 内容,我想您已经涵盖了这些内容,因此我将省略。

而不是写:await Task.WhenAll(DownloadPDF(), DownloadMobi());

执行以下操作

await DownloadPDF();
// update button to display "View PDF"
// add button click listener (optional if it's already registered)
// open file in PDF reader
await DownloadMobi();

【讨论】:

    【解决方案2】:

    使用ContinueWithTask的方法

    var task = DownloadPDF();
    task.ContinueWith((pdfDownloadTask)=> DownloadMobi());
    

    pdf下载任务完成后会继续执行下一个任务

    【讨论】:

      【解决方案3】:
       private stringBuilder urlStr = null;
       public void DownloadFiles()
       {
         List<string> url = new List<string>();
         urlStr = new StringBuilder();
         url.add("http://files/file.pdf");
         url.add("http://files/file.mobi");
         var tasks = new List<Task>();
         foreach(var tempUrl in url)
         {
           tasks.add(DownloadMobiAndPdf(tempUrl);
         }
         Task.WhenAll(tasks));
       }
      
       private async Task DownloadMobiAndPdf(string url)
        {
          using(var client = new WebClient())
          {
             urlStr.Append(url);
             await client.DonwloadFileTaskAsync(url);
            client.DownloadFileCompleted+=Client_DownloadFileCompleted;
          }
        }
      
      
      
      
      private static void Client_DownloadFileCompleted(object 
      sender,System.ComponentModel.AsyncCompletedEventArgs e)
      {
      
      if(e.Error == null)
      {
       //No error
       if(urlStr.Contains("pdf") 
       {
         //Enable button
       }
      
       }
      
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-23
        • 2017-11-11
        • 2014-10-20
        • 2020-03-10
        相关资源
        最近更新 更多