从类实例中删除( - =)Form#FormClosed事件在派生类中添加(+ =)?

时间:2011-07-12 15:15:55

标签: c# winforms events event-handling anonymous-delegates

我有一个派生自System.Windows.Form.Form的“MyForm”。 MyForm处理我在构造函数中设置的处理程序的FormClosed事件。实例化的MyForm对象是否可以使用 - =成功删除我的MyClass#FormClosed处理程序?如果重要的话,我正在使用匿名方法来连接我的FormClosed事件。

// In MyForm Constructor, this ALWAYS gets fired...
FormClosed += (_sender, _args) => { m_mutex.Dispose(); m_mutex = null; };

// In Instantiating Class
MyForm form = new MyForm();
form.FormClosed += (_sender, _args) => {  };

// I have also tried using "delegate(object sender, EventArgs e)" and neither worked.

2 个答案:

答案 0 :(得分:3)

是的,你可以删除它 - 但是如果你使用了匿名函数,它会稍微复杂一点。

基本上你要么需要停止使用匿名函数(即将行为放入方法中)你需要有一个字段来存储代表的价值:

private EventHandler formClosedHandler;
...

// In constructor
formClosedHandler = (sender, args) => { ... };
FormClosed += formClosedHandler;

// Later...
FormClosed -= formClosedHandler;
formClosedHandler = null;

就个人而言,我倾向于将逻辑转移到一个方法中,除非出于某种原因它真的很棘手。

答案 1 :(得分:0)

是的,即使在Disposed()方法中,您也可以取消订阅任何活动。