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;
     }
}