プロダクションコードで次の方法を使用します。
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
オブジェクトがガベージコレクションされないようにする内部的な問題が発生している可能性があります(たとえば、オブジェクトが応答を待っている間にどこかでグローバルオブジェクトに登録される可能性があります)。
違いがあれば、コードは.NET2.0で実行されています。