gpt4 book ai didi

c# - Web 客户端 DownloadFileCompleted 获取文件名

转载 作者:太空狗 更新时间:2023-10-29 20:49:22 34 4
gpt4 key购买 nike

我试过这样下载文件:

WebClient _downloadClient = new WebClient();

_downloadClient.DownloadFileCompleted += DownloadFileCompleted;
_downloadClient.DownloadFileAsync(current.url, _filename);

// ...

下载完成后,我需要启动另一个下载文件的进程,我尝试使用 DownloadFileCompleted 事件。

void DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (e.Error != null)
{
throw e.Error;
}
if (!_downloadFileVersion.Any())
{
complited = true;
}
DownloadFile();
}

但是,我不知道从 AsyncCompletedEventArgs 下载文件的名称,我自己做了

public class DownloadCompliteEventArgs: EventArgs
{
private string _fileName;
public string fileName
{
get
{
return _fileName;
}
set
{
_fileName = value;
}
}

public DownloadCompliteEventArgs(string name)
{
fileName = name;
}
}

但我不明白如何调用我的事件而不是 DownloadFileCompleted

对不起,如果这是个不好的问题

最佳答案

一种方法是创建闭包。

WebClient _downloadClient = new WebClient();        
_downloadClient.DownloadFileCompleted += DownloadFileCompleted(_filename);
_downloadClient.DownloadFileAsync(current.url, _filename);

这意味着您的 DownloadFileCompleted 需要返回事件处理程序。

public AsyncCompletedEventHandler DownloadFileCompleted(string filename)
{
Action<object, AsyncCompletedEventArgs> action = (sender, e) =>
{
var _filename = filename;
if (e.Error != null)
{
throw e.Error;
}
if (!_downloadFileVersion.Any())
{
complited = true;
}
DownloadFile();
};
return new AsyncCompletedEventHandler(action);
}

我创建名为 _filename 的变量的原因是为了捕获传递到 DownloadFileComplete 方法的文件名变量并将其存储在闭包中。如果您不这样做,您将无法访问闭包中的文件名变量。

关于c# - Web 客户端 DownloadFileCompleted 获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917009/

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