gpt4 book ai didi

c# - VB 中的异步文件下载不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:52 24 4
gpt4 key购买 nike

我有以下内容:

wc.DownloadDataCompleted += Wc_DownloadDataCompleted;
FileStream f = File.OpenWrite(insLoc + "\\update.zip");
wc.DownloadDataAsync(new Uri("http://example.com/file.zip"), installLoc + "\\file.zip");

(并且在一个单独的函数中)

private void Wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
if (e.Error == null) {
MessageBox.Show("Download success");
}
else { MessageBox.Show("Download failed"); }

f.Flush();
f.Dispose();
}

当我检查它应该下载到的文件时,它存在,但里面什么也没有(即,它是 0 字节)。下载完成后我刷新了 FileStream,这是怎么回事?我也有一个进度条,它慢慢增加到 100%,所以我知道它正在下载 ZIP 文件,并显示“下载成功”消息框。

提前致谢!

最佳答案

您应该使用回调函数来保存生成的文件(表示为作为第二个参数传递的字节数组):

wc.DownloadDataCompleted += Wc_DownloadDataCompleted;
wc.DownloadDataAsync(new Uri("http://example.com/file.zip"));

然后:

private void Wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
if (e.Error == null)
{
string resultFile = Path.Combine(insLoc, "update.zip");
System.IO.File.WriteAllBytes(resultFile, e.Result);
MessageBox.Show("Download success");
}
else
{
MessageBox.Show("Download failed");
}
}

现在您可以快速看到使用此方法整个文件在刷新到文件系统之前作为字节数组加载到内存中。这是非常低效的,尤其是当您下载大文件时。因此,建议使用 DownloadFileAsync方法代替。

wc.DownloadFileCompleted += Wc_DownloadFileCompleted;
string resultFile = Path.Combine(insLoc, "update.zip");
var uri = new Uri("http://example.com/file.zip");
wc.DownloadFileAsync(uri, resultFile);

和相应的回调:

private void Wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Error == null)
{
MessageBox.Show("Download success");
}
else
{
MessageBox.Show("Download failed");
}
}

关于c# - VB 中的异步文件下载不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com