如果Form1打开Form2并注册Form2.TextChanged,我需要取消注册Form2.如果Form2正在关闭,



这是关于从。net中妥善处理对象的另一个问题。在阅读了许多关于处理最佳实践(以及人们的观点)的不同文章之后,我无法得到这个问题的答案。我有两个表单,Form1和Form2。

Form1

void ShowFormButton_Click(object sender, eventargs e)
{
    Form2 form = new Form2();
    form.TextChanged += new eventhandler(form_TextChanged);
    form.Show(this);
}

Form2

void CloseFormButton_Click(object sender, eventargs e)
{
    Close();
}

在Form2中调用Close()时,Form2应该有dispose()方法调用,因为它是通过调用Show()方法打开的,但因为Form1已经注册了TextChanged事件或Form2,这会使Form2不被处置或使GC处置的过程效率较低吗?

Thanks in advance

Form2 = new Form2();的形式。TextChanged += new eventandler (form_TextChanged);之前

这意味着,Form2实例引用了Form1的form_TextChanged方法。当Form2关闭时,这不会阻止它被收集,所以在这种情况下,取消订阅不是必须的。

假设Form2订阅了Form1事件。在这种情况下,当Form2关闭时,Form1仍然对Form2有活动引用,并且无法收集Form2,从而造成内存泄漏。

因此,答案取决于订阅方向和事件源/订阅者生命周期。在任何情况下,如果有不清楚的地方,最好取消注册事件。

相关内容

  • 没有找到相关文章

最新更新