EventHandler a = new EventHandler(control_RegionChanged);
EventHandler b = new EventHandler(control_RegionChanged);
if (a == b)
{
Console.WriteLine("Same!");
}
else
{
Console.WriteLine(a.GetHashCode() + " " + b.GetHashCode());
}
This writes Same! to the console.
control.RegionChanged += new EventHandler(control_RegionChanged);
control.RegionChanged -= new EventHandler(control_RegionChanged);
After this code executes, is the EventHandler unregistered?
Yes; delegates are compared on the instance and MethodInfo; if those are the same, then it will work. The problem comes when trying to unsubscribe an anonymous method; in that case, you must keep a reference to the delegate in order to unsubscribe.
So:
This is fine:
control.SomeEvent += obj.SomeMethod;
//...
control.SomeEvent -= obj.SomeMethod;
But this is much riskier:
control.SomeEvent += delegate {Trace.WriteLine("Foo");};
//...
control.SomeEvent -= delegate {Trace.WriteLine("Foo");};
The correct process with anonymous methods is:
EventHandler handler = delegate {Trace.WriteLine("Foo");};
control.SomeEvent += handler;
//...
control.SomeEvent -= handler;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With