我在一段生产代码中使用了以下方法:
private void DownloadData(Uri uri)
{
WebClient webClient = new WebClient();
DownloadDataCompletedEventHandler eh = null;
eh = delegate(object sender, DownloadDataCompletedEventArgs e)
{
webClient.DownloadDataCompleted -= eh;
((IDisposable) webClient).Dispose();
OnDataDownloaded();
};
webClient.DownloadDataCompleted += eh;
webClient.DownloadDataAsync(uri);
}
我现在担心在调用事件WebClient
之前实例被垃圾收集可能会导致难以重现的错误DownloadDataCompleted
:退出我的DownloadData()
方法后,没有明显的WebClient
对象引用,因此这可能会发生。
所以我的问题是:这真的会发生吗?我无法重现该问题,因此可能会发生一些内部事情,从而阻止WebClient
对象被垃圾收集(例如,在等待响应时,对象可能会在某处向全局对象注册自身)。
如果这有什么不同的话,该代码将在 .NET 2.0 上运行。