1

我正在尝试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)。[ /下载]

我怎样才能让它工作?

编辑: 托管站点(000webhost)阻止.exe文件下载...

4

3 回答 3

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();
于 2015-10-04T09:12:52.853 回答
1

WebClient.DownloadFileAsync使用基于事件的异步模式,并且与-之前的任何XXXAsync WebClient一样,需要订阅XXXCompleted事件。因此,在DownloadFile的情况下,应订阅DownloadFileCompleted以等待下载完成。asyncawait

随着async-await基于任务的异步模式 (TAP)的出现。通常,TAP 方法的后缀为Async,但由于类中已经存在Async后缀的成员,因此适用第二条规则并且方法后缀为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");
    }
}
于 2015-10-04T23:40:49.250 回答
0

感谢您的答案...

无论如何,我发现我无法真正.exe从托管我的网站(000webhost)的位置下载文件,因为它被阻止(我认为出于安全原因)。

一种解决方法,首先,我需要将一个.exe文件放到一个 zip 文件夹中,然后上传它,这样我才能成功下载它......

于 2015-12-15T10:01:49.757 回答