所以我把我的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);
}
答案 0 :(得分:2)
不,没有必要。 GC收集WebClient后,将清除所有事件处理程序。在GC发生之前,它们不会造成任何伤害,因为事件无法触发,因此永远不会调用处理程序。