我正在编写一个应用程序,我需要从网站下载exe文件。 我正在使用Visual studio express 2008。
我正在使用以下代码。
private void button1_Click(object sender, EventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadFileAsync(new Uri("http://example.com/images/def.exe"), @"d:\ac\def.exe");
}
def.exe被下载到D盘的Ac文件夹中但是是0字节。
我无法理解为什么会这样。
请帮帮我。
答案 0 :(得分:4)
DownloadFileAsync
方法异步运行 ,这意味着它会在下载开始后立即返回。如果您想等待它结束,您必须订阅DownloadFileCompleted
事件。
当然,您也可以使用同步方法,如下所示:
webClient.DownloadFile(new Uri("http://example.com/images/def.exe"), @"d:\ac\def.exe");
答案 1 :(得分:2)
您可以稍微更改一下代码以使其正常工作。 DownloadFileAsync
是异步调用,因此可能是您的线程在下载完成之前执行它。
如果使用异步
,则需要附加处理程序以确定下载是否已完成 [TestMethod]
public void TestDownload()
{
var webClient = new WebClient();
webClient.DownloadProgressChanged += webClient_DownloadProgressChanged;
webClient.DownloadFileAsync(new Uri("https://www.telerik.com/downloads/productfiles/btmba/TelerikJustDecompileSetup_2014.3.1021.0.exe"), @"c:\temp\justdecompile.exe");
// just to show in a Unit Test.. Not required in actual code
Thread.Sleep(10000);
var info = new FileInfo(@"c:\temp\justdecompile.exe");
Assert.IsTrue(info.Length > 0);
}
你的处理程序看起来像,
void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Debug.WriteLine(String.Format("{0} downloaded {1} of {2} bytes. {3} % complete...",
(string)e.UserState,
e.BytesReceived,
e.TotalBytesToReceive,
e.ProgressPercentage));
}