代码之家  ›  专栏  ›  技术社区  ›  Andy

C-移除事件处理程序-FormClosing事件或Dispose()方法

  •  13
  • Andy  · 技术社区  · 16 年前

    假设我有一个通过.showDialog()方法打开的表单。

    在某种程度上,我将一些事件处理程序附加到表单上的一些控件上。

    例如

    // Attach radio button event handlers.
    this.rbLevel1.Click += new EventHandler(this.RadioButton_CheckedChanged);
    this.rbLevel2.Click += new EventHandler(this.RadioButton_CheckedChanged);
    this.rbLevel3.Click += new EventHandler(this.RadioButton_CheckedChanged);
    

    当窗体关闭时,我需要删除这些处理程序,对吗?

    目前,当FormClosing事件被激发时,我正在执行此操作。

    例如

    private void Foo_FormClosing(object sender, FormClosingEventArgs e)
    {
        // Detach radio button event handlers.
        this.rbLevel1.Click -= new EventHandler(this.RadioButton_CheckedChanged);
        this.rbLevel2.Click -= new EventHandler(this.RadioButton_CheckedChanged);
        this.rbLevel3.Click -= new EventHandler(this.RadioButton_CheckedChanged);
    }
    

    但是,我看到了一些示例,其中处理程序在dispose()方法中被删除。

    有没有“最佳实践”的方法?

    (使用c,winforms,.net 2.0)

    谢谢。

    2 回复  |  直到 16 年前
        1
  •  18
  •   Ben M    16 年前

    在这种情况下,不需要删除处理程序,因为表单及其按钮都不会被表单外部的代码引用,因此整个对象图都将被垃圾收集。

        2
  •  3
  •   dthorpe    16 年前

    不,不需要从要关闭的窗体上的控件中删除事件处理程序。它们将一起处理。

    您可能会想到需要删除事件处理程序以避免浏览器内存泄漏的网页。