2010-07-22 18 views
7

Wie kann ich diese Methode programmgesteuert aufrufen? Wenn ich einfach tun KillZombies(), es sagt, ich, nicht die richtigen Parameter haben, aber ich weiß nicht, welche Parameter angeben, wenn ich Code nur mit ...Programmgesteuertes Auslösen eines Ereignisses?

public static void KillZombies(object source, ElapsedEventArgs e) 
{ 
    Zombies.Kill(); 
} 
+0

+1 für Zombies. –

Antwort

6

Haben Sie versucht:

KillZombies(null, null); 

Vielleicht ist Ihr Design Refactoring:

public static void KillZombies(object source, ElapsedEventArgs e) 
{ 
    //more code specific to this event, logging, whathaveyou. 
    KillSomeZombies(); 
} 

public static void KillSomeZombies() 
{ 
    Zombies.Kill(); 
} 

//elsewhere in your class: 
KillSomeZombies(); 
+0

mit null, null scheint wie eine weniger überladene Lösung. Gibt es irgendwelche Gefahren der Verwendung von null, null neben Nicht-GoodPractice-Code? – sooprise

+0

@Soo: definitiv nichts falsch daran, sich nicht zu wiederholen. TROCKEN! Ich würde es vorziehen, die 'KillZombies (null, null);' zu lesen, wenn ich diesen Code beibehalten würde. –

1

Ihre Methodensignatur benötigt zwei Argumente. Sie können KillZombies() nicht einfach aufrufen, Sie müssen die richtigen Argumente an die Methode übergeben.

Wenn Sie Ihre Quelle oder e nicht haben, können Sie einfach null übergeben.

KillZombies(null, null); 
3
KillZombies(null, null); 

Allerdings würde ich die Frage, ob das ist ein gutes Design.

+0

Bestehen Gefahren für diesen Ansatz? Gutes Design ist für diesen speziellen Aspekt meines Programms nicht sehr wichtig. – sooprise

+0

Nein, nicht, wenn die Methode so einfach ist. –

3

Sie müssten die Parameter auch erstellen und übergeben. Warum rufen Sie die Funktion nicht einfach direkt an, indem Sie sie in eine andere Funktion einfügen, die anderen Klassen zum Anrufen zur Verfügung steht? Es wird für viel saubereres Design sorgen.

heißt

internal void MakeZombiesKill() 
{ 
    Zombies.Kill(); 
} 

?

0

Sie in der Regel aus dem Objekt verwenden, innerhalb derer Sie die Verfahren als Quelle nennen (oder null, wenn statisch). Und legen Sie die ElapsedEventArgs auf etwas für die Methode relevant. Für ElapsedEventArgs wäre es so etwas wie: new ElapsedEventArgs() { SignalTime = DateTime.Now}

KillZombies(this, new ElapsedEventArgs() { SignalTime = DateTime.Now}); 

Wenn Sie nicht wirklich Quelle oder e innerhalb der Methode verwenden Sie es mit null Argumente aufrufen können.

KillZombies(null, null); 
0

Technisch gesehen, sollten Sie die Aufgabe sein Abtrennen aus dem Inneren der Event-Handler und haben die Event-Handler die Methode rufen Sie den Code, den Sie ausführen möchten, auf diese Weise Sie diesen Code ohne Auslösen des Ereignishandler aufrufen können. Wenn Sie jedoch wollen programmatisch die Event-Handler auszulösen:

KillZombies(this, new ElapsedEventArgs()) 

Ich würde es jedoch ausbrechen als ein häufig verwendetes Best Practice ist ...

+0

Dies funktioniert nicht, da 'ElapsedEventArgs' keine Konstruktoren definiert hat. – Otiel

Verwandte Themen