2010-07-22 19 views
7

Jak mogę wywołać tę metodę programowo? Gdybym proste zrobić KillZombies(), to mówi, że nie mają odpowiednie parametry, ale nie wiem jakie parametry, aby określić, kiedy jestem tylko przy użyciu kodu ...Programowe wyzwalanie zdarzenia?

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

+1 dla zombie. –

Odpowiedz

6

Czy próbowałeś:

KillZombies(null, null); 

Może byłaby swój projekt:

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

przy użyciu wartości null, null wydaje się mniej zagraconym rozwiązaniem. Czy są jakieś niebezpieczeństwa związane z używaniem wartości null, null, oprócz tego, że nie ma kodu GoodPractice? – sooprise

+0

@Soo: zdecydowanie nic złego w nie powtarzaniu się. SUCHY! Wolałbym czytać 'KillZombies (null, null) ;, jeśli zachowałem ten kod. –

1

podpisie metoda wymaga dwóch argumentów. Nie możesz po prostu wywołać KillZombies(), musisz przekazać poprawne argumenty do metody.

KillZombies(source, e); 

Jeśli nie masz swojego źródła lub e, możesz po prostu przekazać wartość null.

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

Chciałbym jednak pytanie, czy to jest dobry projekt.

+0

Czy istnieją jakiekolwiek niebezpieczeństwa związane z takim podejściem? Dobry projekt nie ma większego znaczenia dla tego konkretnego aspektu mojego programu. – sooprise

+0

Nie, nie, jeśli ta metoda jest prosta. –

3

Będziesz musiał utworzyć parametry i je również przekazać. Dlaczego po prostu nie wywołasz tej funkcji bezpośrednio, umieszczając ją w innej funkcji, która jest dostępna dla innych klas? Zapewni to o wiele bardziej elegancki wygląd.

tj

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

?

0

Zazwyczaj użyć obiektu od wewnątrz którego wywołać metodę jako źródła (lub null, jeśli statyczne). I ustaw ElapsedEventArgs na coś istotnego dla tej metody. Dla ElapsedEventArgs byłoby coś takiego: new ElapsedEventArgs() { SignalTime = DateTime.Now}

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

Jeśli naprawdę nie używać źródła lub e wewnątrz metody można nazwać null argumenty.

KillZombies(null, null); 
0

Technicznie rzecz biorąc, powinno być oddzielenie zadanie od wewnątrz obsługi zdarzeń i mają obsługi zdarzeń wywołać metodę zawierający kod, który chcesz uruchomić, w ten sposób można wywołać tego kodu bez potknięcia obsługi zdarzeń. Jednakże, jeśli chcesz potknąć obsługi zdarzeń programowo:

KillZombies(this, new ElapsedEventArgs()) 

ja jednak złamie go jak to często wykorzystywane najlepsze praktyki ...

+0

To nie działa, ponieważ 'ElapsedEventArgs' nie ma zdefiniowanych konstruktorów. – Otiel

Powiązane problemy