How to remove event handler

  • Thread starter Thread starter moondaddy
  • Start date Start date
M

moondaddy

I'm working in WPF and c# and am adding an event handler to an object like
this:



this.tgt.SizeChanged += new SizeChangedEventHandler(OnTargetSizeChanged);



Later I kill the instance of tgt like this:

tgt = null;; //which I'm not sure this is the most correct way of getting
rid of it.



However, I find that the event 'OnTargetSizeChanged' is still fireing.
Evedently the event handler is still alive and wired. Before I kill the
object 'tgt', should I be removing any attached event handlers? If so, how?



Thanks.





(e-mail address removed)
 
moondaddy said:
I'm working in WPF and c# and am adding an event handler to an object like
this:

this.tgt.SizeChanged += new SizeChangedEventHandler(OnTargetSizeChanged);

Later I kill the instance of tgt like this:

tgt = null;; //which I'm not sure this is the most correct way of getting
rid of it.

That's not "killing" anything. It's making the object available to the
garbage collector *if* nothing else is referencing it. Is it still a
control on the form, perhaps?
However, I find that the event 'OnTargetSizeChanged' is still fireing.
Evedently the event handler is still alive and wired. Before I kill the
object 'tgt', should I be removing any attached event handlers? If
so, how?

Well, I think you need to seriously consider how you're "removing" tgt,
but to remove the event handler, just do:

this.tgt.SizeChanged -= new SizeChangedEventHandler
(OnTargetSizeChanged);
 
Wouldn't that fail due to the SizeChangedEventHandler being a different
instance than was added via +=?
 
Keith Patrick said:
Wouldn't that fail due to the SizeChangedEventHandler being a different
instance than was added via +=?

No. They'd still compare as being equal, which is what's used.
 
Well, cool! I was gonna do the -= on some code a while back but saw the new
instance I had to create and didn't even check to see if it would work.
Guess I can finally fix that!
 
Thanks this looks like just what I need. By the way, this code is running
in a class that manages some custom bindings and tgt is a reference to a
user control on a canvas. when I connect a line to tgt, I use a custom
binding in this class. When tgt becomes un-connected I unbind it from the
line and no longer need a reference to tgt so I set tgt=null in the binding
management class. However, tgt is still alive and well in the canvas.
Saying all of this, is it appropriate to set tgt to null here? or should I
do something else?
 
moondaddy said:
Thanks this looks like just what I need. By the way, this code is running
in a class that manages some custom bindings and tgt is a reference to a
user control on a canvas. when I connect a line to tgt, I use a custom
binding in this class. When tgt becomes un-connected I unbind it from the
line and no longer need a reference to tgt so I set tgt=null in the binding
management class. However, tgt is still alive and well in the canvas.
Saying all of this, is it appropriate to set tgt to null here? or should I
do something else?

If you want the user control to actually "die" you'll need to remove it
from the canvas too. If you just want to not reference it any more from
tgt, then setting tgt to null is entirely appropriate.
 
Jon Skeet said:
If you want the user control to actually "die" you'll need to remove it
from the canvas too. If you just want to not reference it any more from
tgt, then setting tgt to null is entirely appropriate.
 
Great! Thanks alot.


Jon Skeet said:
If you want the user control to actually "die" you'll need to remove it
from the canvas too. If you just want to not reference it any more from
tgt, then setting tgt to null is entirely appropriate.
 
If I just clear the container control, will the handlers added in the child control will be removed?



moondaddy wrote:

Great!
28-Feb-07

Great! Thanks alot.

Previous Posts In This Thread:

How to remove event handler
I'm working in WPF and c# and am adding an event handler to an object like
this


this.tgt.SizeChanged += new SizeChangedEventHandler(OnTargetSizeChanged)


Later I kill the instance of tgt like this

tgt = null;; //which I'm not sure this is the most correct way of getting
rid of it


However, I find that the event 'OnTargetSizeChanged' is still fireing.
Evedently the event handler is still alive and wired. Before I kill the
object 'tgt', should I be removing any attached event handlers? If so, how


Thanks



(e-mail address removed)

Re: How to remove event handler

That's not "killing" anything. It's making the object available to the
garbage collector *if* nothing else is referencing it. Is it still a
control on the form, perhaps

Well, I think you need to seriously consider how you're "removing" tgt,
but to remove the event handler, just do

this.tgt.SizeChanged -= new SizeChangedEventHandle
(OnTargetSizeChanged)

--
Jon Skeet - <[email protected]
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skee
If replying to the group, please do not mail me too

Wouldn't that fail due to the SizeChangedEventHandler being a different
Wouldn't that fail due to the SizeChangedEventHandler being a differen
instance than was added via +=?

Re: How to remove event handler
No. They'd still compare as being equal, which is what is used

-
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skee
If replying to the group, please do not mail me too

Well, cool!
Well, cool! I was gonna do the -= on some code a while back but saw the ne
instance I had to create and did not even check to see if it would work
Guess I can finally fix that!

Thanks this looks like just what I need.
Thanks this looks like just what I need. By the way, this code is running
in a class that manages some custom bindings and tgt is a reference to a
user control on a canvas. when I connect a line to tgt, I use a custom
binding in this class. When tgt becomes un-connected I unbind it from the
line and no longer need a reference to tgt so I set tgt=null in the binding
management class. However, tgt is still alive and well in the canvas.
Saying all of this, is it appropriate to set tgt to null here? or should I
do something else


Re: How to remove event handler

If you want the user control to actually "die" you'll need to remove it
from the canvas too. If you just want to not reference it any more from
tgt, then setting tgt to null is entirely appropriate

--
Jon Skeet - <[email protected]
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skee
If replying to the group, please do not mail me too

Re: How to remove event handler


Great!
Great! Thanks alot.


Submitted via EggHeadCafe - Software Developer Portal of Choice
Scrolling in WPF Toolkit?s Column Chart
http://www.eggheadcafe.com/tutorial...6/scrolling-in-wpf-toolkits-column-chart.aspx
 
If I clear the container control, will the handlers of child control be removed?



moondaddy wrote:

Thanks this looks like just what I need.
27-Feb-07

Thanks this looks like just what I need. By the way, this code is running
in a class that manages some custom bindings and tgt is a reference to a
user control on a canvas. when I connect a line to tgt, I use a custom
binding in this class. When tgt becomes un-connected I unbind it from the
line and no longer need a reference to tgt so I set tgt=null in the binding
management class. However, tgt is still alive and well in the canvas.
Saying all of this, is it appropriate to set tgt to null here? or should I
do something else


Previous Posts In This Thread:

How to remove event handler
I'm working in WPF and c# and am adding an event handler to an object like
this


this.tgt.SizeChanged += new SizeChangedEventHandler(OnTargetSizeChanged)


Later I kill the instance of tgt like this

tgt = null;; //which I'm not sure this is the most correct way of getting
rid of it


However, I find that the event 'OnTargetSizeChanged' is still fireing.
Evedently the event handler is still alive and wired. Before I kill the
object 'tgt', should I be removing any attached event handlers? If so, how


Thanks



(e-mail address removed)

Re: How to remove event handler

That's not "killing" anything. It's making the object available to the
garbage collector *if* nothing else is referencing it. Is it still a
control on the form, perhaps

Well, I think you need to seriously consider how you're "removing" tgt,
but to remove the event handler, just do

this.tgt.SizeChanged -= new SizeChangedEventHandle
(OnTargetSizeChanged)

--
Jon Skeet - <[email protected]
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skee
If replying to the group, please do not mail me too

Wouldn't that fail due to the SizeChangedEventHandler being a different
Wouldn't that fail due to the SizeChangedEventHandler being a differen
instance than was added via +=?

Re: How to remove event handler
No. They'd still compare as being equal, which is what is used

-
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skee
If replying to the group, please do not mail me too

Well, cool!
Well, cool! I was gonna do the -= on some code a while back but saw the ne
instance I had to create and did not even check to see if it would work
Guess I can finally fix that!

Thanks this looks like just what I need.
Thanks this looks like just what I need. By the way, this code is running
in a class that manages some custom bindings and tgt is a reference to a
user control on a canvas. when I connect a line to tgt, I use a custom
binding in this class. When tgt becomes un-connected I unbind it from the
line and no longer need a reference to tgt so I set tgt=null in the binding
management class. However, tgt is still alive and well in the canvas.
Saying all of this, is it appropriate to set tgt to null here? or should I
do something else


Re: How to remove event handler

If you want the user control to actually "die" you'll need to remove it
from the canvas too. If you just want to not reference it any more from
tgt, then setting tgt to null is entirely appropriate

--
Jon Skeet - <[email protected]>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too

Re: How to remove event handler


Great!
Great! Thanks alot.

removing usercontrol will remove handlers?
If I just clear the container control, will the handlers added in the child control will be removed?


Submitted via EggHeadCafe - Software Developer Portal of Choice
Win a Free License of SandRibbon for Silverlight
http://www.eggheadcafe.com/tutorial...ee-license-of-sandribbon-for-silverlight.aspx
 
Back
Top