Программно инициировав событие?

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

public static void KillZombies(object source, ElapsedEventArgs e)
{
    Zombies.Kill();
}
7
задан sooprise 22 July 2010 в 16:31
поделиться

6 ответов

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

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();
6
ответ дан 6 December 2019 в 19:31
поделиться
KillZombies(null, null);

Однако я сомневаюсь, что это хороший дизайн.

3
ответ дан 6 December 2019 в 19:31
поделиться

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

т.е.

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

?

3
ответ дан 6 December 2019 в 19:31
поделиться

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

KillZombies(source, e);

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

KillZombies(null, null);
1
ответ дан 6 December 2019 в 19:31
поделиться

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

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

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

KillZombies(null, null);
0
ответ дан 6 December 2019 в 19:31
поделиться

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

KillZombies(this, new ElapsedEventArgs())

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

0
ответ дан 6 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: