我正在尝试使用以下代码下载test.exe
文件:
public void DownloadFile()
{
using(var client = new WebClient())
{
client.DownloadFileAsync(new Uri("http://www.acromix.net16.net/download/test.exe"), "test.exe");
}
}
我不知道并且不知道为什么它是0 KB(应该是328 KB)。 [/downloads]
我怎样才能让它发挥作用?
修改
托管站点(000webhost)阻止.exe
个文件下载...
答案 0 :(得分:5)
问题是您使用的是DownloadFileAsync
异步版本。要知道下载何时完成,您必须订阅DownloadFileCompleted
事件。
使用同步方法:
public void DownloadFile()
{
using(var client = new WebClient())
{
client.DownloadFile(new Uri("http://www.acromix.net16.net/download/test.exe"), "test.exe");
}
}
或者使用新的async-await方法:
public async Task DownloadFileAsync()
{
using(var client = new WebClient())
{
await client.DownloadFileTaskAsync(new Uri("http://www.acromix.net16.net/download/test.exe"), "test.exe");
}
}
然后像这样调用这个方法:
await DownloadFileAsync();
答案 1 :(得分:1)
WebClient.DownloadFileAsync使用Event-based Asynchronous Pattern,并且与async
- await
之前的任何 XXXAsync WebClient一样,需要订阅 XXX已完成 事件。因此,在 DownloadFile 的情况下,应订阅DownloadFileCompleted以等待下载完成。
随着async
- await
的出现Task-based Asynchronous Pattern (TAP)。通常,TAP方法的后缀是异步,但由于类中已经有异步作为固定成员,因此适用第二条规则并且方法的后缀为 TaskAsync
由于OP使用async
- await
标记了问题,因此正确的代码为:
public async Task DownloadFileAsync()
{
using(var client = new WebClient())
{
await client.DownloadFileTaskAsync(
new Uri("http://www.acromix.net16.net/download/test.exe"),
"test.exe");
}
}
答案 2 :(得分:0)
感谢您的回答......
无论如何,我发现我无法从我托管网站(000webhost)的地方下载.exe
文件,因为它已被屏蔽(出于安全原因,我认为)。< / p>
一种解决方法,首先,我需要将一个.exe
文件放到一个zip文件夹中,然后上传它,这样我就可以成功下载...