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