10 Stimmen

Manuelles Aufrufen eines Ereignis-Handlers

Ich habe eine Ereignisbehandlungsmethode, die direkt als Standardmethode aufgerufen wird. Das heißt, sie wird nicht nur aufgerufen, wenn mein Ereignis eintritt, sondern auch einfach als private Methode.

UtilStk.StkRoot.OnStkObjectAdded += new 
    IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects);

private void TallyScenarioObjects(object sender)
{
    ...
}

Ist es sinnvoll, ein Null-Argument zu übergeben, wenn dieser Handler direkt aufgerufen wird?

TallyScenarioObjects(null);

18voto

Ed S. Punkte 118985

Kapseln Sie einfach die gemeinsame Logik in eine andere Methode, die von Ihrem Event-Handler aufgerufen werden kann:

UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects);

private void TallyScenarioObjects(object sender)
{
    DoStuff();
}

private void DoStuff() { ... }

private void AnotherMethod()
{
    DoStuff();
}

Das heißt, Ihr Betreuer ist eine Methode, es gibt nichts Besonderes daran, so dass Sie immer dummy Argumente und rufen Sie es direkt. Ich würde diesen Weg aber nicht gehen.

7voto

ChrisF Punkte 130622

Ja, das würde funktionieren, aber es wäre besser, eine zweite Methode zu haben, die direkt oder vom Ereignis-Handler aufgerufen werden kann:

UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects);

private void TallyScenarioObjects(object sender)
{
     DoTally(....);
}

private void DoTally(....)
{
}

Zumindest verwirren Sie damit nicht andere Entwickler, die nicht erwarten, dass ein Ereignis-Handler auf diese Weise aufgerufen wird.

1voto

Ich stimme dem Rest zu. Lassen Sie Ihr Ereignis eine Methode aufrufen. Dann können Sie diese Methode von wo auch immer Sie möchten, aufrufen.

UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects);

private void TallyScenarioObjects(object sender)
{
    MyMethod();
}

private  void MyMethod()
{
    //Code here.
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X