Программно вызывать событие? - PullRequest
7 голосов
/ 22 июля 2010

Как я могу вызвать этот метод программно?Если я просто делаю KillZombies (), он говорит, что у меня нет правильных параметров, но я не знаю, какие параметры указывать, когда я просто использую код ...

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

Ответы [ 6 ]

6 голосов
/ 22 июля 2010

Вы пробовали:

KillZombies(null, null);

Возможно рефакторинг вашего дизайна:

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();
3 голосов
/ 22 июля 2010

Вы должны будете создать параметры и передать их тоже.Почему бы просто не вызвать функцию напрямую, поместив ее в другую функцию, доступную для вызова другими классами?Это сделает намного аккуратнее дизайн.

то есть

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

?

3 голосов
/ 22 июля 2010
KillZombies(null, null);

Однако я бы спросил, хороший ли это дизайн.

1 голос
/ 22 июля 2010

Для подписи вашего метода требуется два аргумента.Вы не можете просто вызвать KillZombies (), вам нужно будет передать правильные аргументы методу.

KillZombies(source, e);

Если у вас нет источника или e, вы можете просто передать ноль.*

0 голосов
/ 22 июля 2010

Технически говоря, вы должны отделить задачу от обработчика событий, и обработчик событий должен вызвать метод, содержащий код, который вы хотите запустить, чтобы вы могли вызывать этот код, не отключая обработчик событий. Однако, если вы хотите программно отключить обработчик событий:

KillZombies(this, new ElapsedEventArgs())

Я, однако, вырвался бы из этого, поскольку это часто используемая лучшая практика ...

0 голосов
/ 22 июля 2010

Обычно вы используете объект, из которого вы вызываете метод, в качестве источника (или NULL, если статический).И установите ElapsedEventArgs на что-то релевантное для метода.Для ElapsedEventArgs это будет что-то вроде: new ElapsedEventArgs() { SignalTime = DateTime.Now}

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

Если вы на самом деле не используете source или e внутри метода, вы можете вызвать его с нулевыми аргументами.

KillZombies(null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...