以编程方式触发事件?

时间:2010-07-22 16:31:21

标签: c# events

如何以编程方式调用此方法? 如果我简单地做KillZombies(),它说我没有正确的参数,但我不知道当我只使用代码时要指定的参数...

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

6 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

KillZombies(null, null);

但是,我会质疑这是否是一个好的设计。

答案 2 :(得分:3)

你必须创建参数并传递它们。为什么不直接调用函数将它放在另一个可供其他类调用的函数中?这将使整个设计更加简洁。

即。

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

答案 3 :(得分:1)

您的方法签名需要两个参数。你不能只调用KillZombies(),你需要将正确的参数传递给方法。

KillZombies(source, e);

如果您没有源或e,则只需传递null。

KillZombies(null, null);

答案 4 :(得分:0)

您通常使用您在其中调用方法的对象作为源(如果是静态则为null)。 并将ElapsedEventArgs设置为与方法相关的内容。对于ElapsedEventArgs,它将类似于:new ElapsedEventArgs() { SignalTime = DateTime.Now}

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

如果你没有在方法中使用source或e,你可以用null参数调用它。

KillZombies(null, null);

答案 5 :(得分:0)

从技术上讲,您应该从事件处理程序中分离出任务,并让事件处理程序调用包含您想要运行的代码的方法,这样您就可以调用该代码而不会使事件处理程序失效。但是,如果您想以编程方式跳过事件处理程序:

KillZombies(this, new ElapsedEventArgs())
然而,我会将其分解为经常使用的最佳做法...