【发布时间】:2014-08-22 16:15:14
【问题描述】:
我正在尝试下载文件,等待文件完成下载,然后再读取文件。我有以下方法可以做到这一点:
private async Task startDownload(string link, string savePath)
{
WebClient client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
await client.DownloadFileTaskAsync(new Uri(link), savePath);
}
private void checkUpdateButton_Click(object sender, EventArgs e)
{
Task task = Task.Factory.StartNew(() => startDownload(versionLink, versionSaveTo));
task.Wait();
if (task.IsCompleted)
{
checkVersion();
}
}
checkVersion() 方法读取下载的文件。这是抛出一个IOException 说该文件正在被其他东西使用并且无法读取。我认为拥有task.Wait 会阻止方法的其余部分在任务完成之前执行?
【问题讨论】:
-
两件事:你不需要在
StartDownload中等待,你应该只返回client.DownloadFileTaskAsync(new Uri(link), savePath); -
您不需要在 UI 线程中的任务上
Wait。你需要await代替它。 -
@user,请看下面我的回答。我已经对其进行了测试,它可以正常工作并且不会阻塞 UI 线程。如果您有任何疑问,请发表评论:)
标签: c# multithreading task