如何查看下载的文件当使用Xamarin Android进行另一次下载时

时间:2017-06-11 06:06:25

标签: android file xamarin httpclient

我正在使用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阅读器中打开该文件。移动文件下载应在此过程后开始,下载应在后台进行。 你有没有人建议你的想法来实现这个目标?

3 个答案:

答案 0 :(得分:0)

由于你没有显示任何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();

答案 1 :(得分:0)

使用Task

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

这将在pdf下载任务完成后继续执行下一个任务

答案 2 :(得分:0)

 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
 }

 }

 }