我有一个派生自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.
答案 0 :(得分:3)
是的,你可以删除它 - 但是如果你使用了匿名函数,它会稍微复杂一点。
基本上你要么需要停止使用匿名函数(即将行为放入方法中)或你需要有一个字段来存储代表的价值:
private EventHandler formClosedHandler;
...
// In constructor
formClosedHandler = (sender, args) => { ... };
FormClosed += formClosedHandler;
// Later...
FormClosed -= formClosedHandler;
formClosedHandler = null;
就个人而言,我倾向于将逻辑转移到一个方法中,除非出于某种原因它真的很棘手。
答案 1 :(得分:0)
是的,即使在Disposed()
方法中,您也可以取消订阅任何活动。