I use the following method in a piece of production code:
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);
}
I am now worried that a hard to reproduce bug might be caused by the webClient being garbage collected before the DownloadDataCompleted-event is called: after exiting my DownloadData()-method, there are no obvious references to the WebClient-object, so that could plausibly happen.
So my question is: can this realistically happen? I can not reproduce the problem, so there might be some internal things happening that prevents the WebClient from being garbage collected (e.g. the object might register itself with a global object somewhere while waiting for the response.
The code is running on .NET 2.0 if that makes any difference.