0

这是假设的例子:

WebCleint wc = new WebClient();

wc.DownloadStringCompleted += wc_DownloadStringCompleted;

wc.DownloadStringAsync(new Uri(callString));

wc = new WebClient();

wc.DownloadStringCompleted += wc_DownloadStringCompleted;

wc.DownloadStringAsync(new Uri(callString));

据我了解,垃圾收集器在完全取消引用之前不会抓取某些东西。所以我想我真正的问题是,事件注册算作对对象的引用吗?

我可以进行此调用并通过相同的完成方法返回两个返回吗?

我可以拨打许多不同的网络电话。它们都需要异步完成。它们都可以随机发生。

现在我只是假设我构建它的方式可以防止并发调用,但这是构建东西的糟糕方式哈哈。

我试图避免创建堆栈队列。

4

2 回答 2

1

每个事件注册都会使对象(WebClient)保持活动状态,除非您当前的实例(包含 wc_DownloadStringCompleted 的实例)被释放。您可以取消注册 wc_DownloadStringCompleted 中的事件。要在 wc_DownloadStringCompleted 中获取原始 WebClient,请使用 sender 对象。

public void wc_DownloadStringCompleted(object sender, EventArgs e)
{
    WebClient  wc = (WebClient)sender;

    wc.DownloadStringCompleted -= wc_DownloadStringCompleted;

    // handle download completed
}
于 2013-08-11T00:08:02.943 回答
1

类似于这个问题:

事件处理程序会阻止垃圾收集的发生吗?

似乎发布者(在这种情况下为 wc)不会影响其垃圾收集。wc 持有对事件处理程序的引用,但没有任何东西持有对 wc 的引用。

于 2013-08-11T00:13:29.023 回答