所以我已经将我的 WebClient 封装在 using 语句中。但我突然想知道,如果我的对象实现了 IDisposable 并包装在 using 语句中,我是否需要取消订阅事件?
下面是我当前如何使用 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);
}
最佳答案
不,没有必要。一旦 WebClient 被 GC 收集,所有事件处理程序都将被清理。在 GC 发生之前,它们不会造成任何损害,因为事件不可能触发,因此处理程序永远不会被调用。
关于c# - 如果我处置我的 Webclient,我是否需要取消订阅 WebClient 的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27057381/