Search code examples
c#eventssubscription

Event Subscription Lost when Passing Instance Object


I have created an external class (TheClass) with an event (TheEvent) and subscribe to it from within another class's Panel constructor:

public aPanel()
{
   ...
   theClassInstance.TheEvent += new WaitCallback(aMethod);
   ...
}

Later in the program, I call a method passing theClassInstance as the only parameter

bMethod((object)theClassInstance);

where

public void bMethod(object inputTheClassInstance)
{
   ...
}

Knowing that the input object is of type TheClass, I do the following:

public void bMethod(object inputTheClassInstace)
{
   TheClass theClassInput = (TheClass)inputTheClassInstace;
   ...
}

Later in bMethod() I call a method RaiseEvent() exposed by theClassInput which will actually trigger the event. In RaiseEvent() I have

if(this.TheEvent != null)
   TheEvent();

to make sure something is subscribed to the event but this.TheEvent equates to null. If I place the subscription within bMethod()

bMethod(...)
{
   ...
   theClassInput.TheEvent += new WaitCallback(aMethod);  
   ...
}

it works just fine but I would like to keep it in the Panel's constructor. I figured that because theClassInput is pointing to the same object as theClassInstance it wouldn't make a difference which triggers the event. Any thoughts on how I can keep the subscription in the constructor while calling it from within bMethod() using theClassInput?


Solution

  • Passing an object around does not clear event handlers. You must accidentally create a new object somewhere along the way instead of passing the original one.