如果我处理了我的Webclient,是否需要取消订阅WebClient的事件?

时间:2014-11-21 08:52:10

标签: c# events webclient idisposable

所以我把我的WebClient包装在using语句中。但我突然想知道如果我的对象实现了IDisposable并且包含在使用状态中,我是否需要取消订阅事件?

以下是我目前使用WebClient的示例代码。此代码目前是否存在内存泄漏,因为它不会取消订阅事件,或者dispose方法是否会处理该问题?

using (WebClient wc = new WebClient())
{
    wc.DownloadProgressChanged += ((sender, args) =>
    {
       //monitor something
    });
    wc.DownloadFileCompleted += ((sender, args) =>
    {
       //do something
    });
    wc.DownloadFileAsync(new Uri(string.Format("{0}/{1}", Settings1.Default.WebPhotosLocation, Path.GetFileName(f.FullName))), filePath);
}

1 个答案:

答案 0 :(得分:2)

不,没有必要。 GC收集WebClient后,将清除所有事件处理程序。在GC发生之前,它们不会造成任何伤害,因为事件无法触发,因此永远不会调用处理程序。