C# 如何获取和删除WebClient DownloadFileCompleted事件订阅服务器?
我基于网络客户端制作了一个简单的下载管理器。像这样的事情:C# 如何获取和删除WebClient DownloadFileCompleted事件订阅服务器?,c#,eventhandler,C#,Eventhandler,我基于网络客户端制作了一个简单的下载管理器。像这样的事情: public class DownloadManager(){ public static Dictionary<string,WebClient> DownloadList{get;set;} //... public static WebClient CheckInProgressDownload(string key) {
public class DownloadManager(){
public static Dictionary<string,WebClient> DownloadList{get;set;}
//...
public static WebClient CheckInProgressDownload(string key)
{
System.Net.WebClient result;
if (DownloadsList.TryGetValue(key, out result))
{
return result;
}
else
{
return null;
}
}
}
我的问题是,正如您所看到的,每次我从列表中获取现有的WebClient对象时,它之前都附加了事件处理程序。如何删除它的事件处理程序并添加新的事件处理程序
重要提示:我看到了一些关于堆栈溢出的答案,但没有一个对我有用。像这个和这个。这个例子是:.Before
wc.DownloadProgressChanged+=wc\u DownloadProgressChanged代码>添加wc.DownloadProgressChanged-=wc\u DownloadProgressChanged代码>?@dr.null我也试过了。甚至在循环中执行此操作并多次删除处理程序。没用,对不起。您是否在此处使用单个ProgressBar
?如果是这样的话,WC_DownloadProgressChanged
事件将为每个订阅的实例触发,并使用其自己的百分比更新进度。或者,合计总下载大小并显示总体进度,或者最好使用async
模式从队列下载文件并显示其进度。差不多。
public calss ProgressConrolGroup(){
public void OnCreate(){
var wc = new DownloadManager.CheckInProgressDownload(stringkey);
if(wc!=null){
wc.DownloadProgressChanged += WC_DownloadProgressChanged;
}
}
private void WC_DownloadProgressChanged(object sender,System.Net.DownloadProgressChangedEventArgs e)
{
progressbar.Progress = e.ProgressPercentage;
}
}