【发布时间】:2019-11-13 17:40:30
【问题描述】:
我听说您应该取消订阅已释放控件上的事件。
TextBox textBox;
void Initialize()
{
textBox = new TextBox();
textBox.Click += ClickHandler;
this.Disposed += DisposeControl;
}
void ClickHandler(object sender, EventArgs e)
{
this.foo = bar;
}
void DisposeControl(object sender, EventArgs e)
{
textBox.Click -= ClickHandler;
this.Disposed -= DisposeControl; // DOES THIS LINE MAKE SENSE?
}
在释放后没有对控件的引用,所以我认为没有必要取消注册任何事件处理程序。然而,正如我提到的,人们说你应该这样做。这是否包括注销 dispose 事件本身?
【问题讨论】:
-
我发现有道理。但我认为它没有用,因为
Disposed应该只被调用一次。 -
您可以在这里查看相关性:Component.Dispose
-
@Peter Duniho 请不要链接到四个通常相关的问题,并说我的问题是重复的。这是这样工作的吗?您只需在 Google 上搜索四个半相关的问题,如果该问题听起来一定在过去某个时间点已经回答过,就称其为重复问题?这四个问题中的任何一个都没有解决我的确切问题。
-
我同意我认为 SO 的“重复关闭”过程有点激进。我发现,当您遇到问题时,并不总是很容易看到相似之处。在这种情况下,虽然@PeterDuniho 链接到的文章没有以您提出的确切方式回答您的问题,但它们确实回答了您的一般问题。上面的第四个是我在回答中链接到的那个。我的答案的唯一区别是我在您的示例和其他答案中表达的内容之间“连接了点”。