I have a “MyForm” that derives from System.Windows.Form.Form. MyForm handles the FormClosed event whose handler I set up in the constructor. Is it possible for an instantiated MyForm object to successfully remove my MyClass#FormClosed handler using -=? I am using an anonymous method to wire my FormClosed event if that matters.
// 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.
Yes, you can remove it – but if you’ve used an anonymous function, it’s slightly trickier.
Basically you’ll either need to stop using an anonymous function (i.e. put the behaviour into a method) or you’ll need to have a field to store the value of the delegate:
Personally I’d favour moving the logic into a method unless it’s really tricky for some reason.