我应该在表单结束时从事件中取消注册吗?

时间:2016-07-27 12:34:29

标签: c# events

我有以下代码:

private void someButton_Click(object sender, EventArgs e)
{
    SomeForm f = new SomeForm();
    this.SomeEvt += f.someFunc;
    this.AnotherEvt += f.anotherFunc;
    f.Show();
}

我应该f.someFuncthis.SomeEvtf.anotherFunc取消注册 this.AnotherEvt吗?

f.anotherFunc关闭时,我不想同时执行someFuncf

如果我应该取消注册,那么我该如何做到这一点,因为在此函数结束后不再有SomeForm f

我正在使用.Net framework 4.0和WinForms。

1 个答案:

答案 0 :(得分:3)

根据您对我的评论的回答:

  

...当f.anotherFunc关闭时,我不想执行f

您应取消注册该事件,例如与lambda:

private void someButton_Click(object sender, EventArgs e)
{
    SomeForm f = new SomeForm();
    this.SomeEvt += f.someFunc;
    this.AnotherEvt += f.anotherFunc;

    f.FormClosed += (ss, ee) => {
      this.SomeEvt -= f.someFunc;
      this.AnotherEvt -= f.anotherFunc;
    };

    f.Show();
}