C# 以编程方式触发事件?

C# 以编程方式触发事件?,c#,events,C#,Events,如何以编程方式调用此方法? 如果我简单地做了KillZombies(),它会说我没有正确的参数,但我不知道在使用代码时要指定哪些参数 public static void KillZombies(object source, ElapsedEventArgs e) { Zombies.Kill(); } 您的方法签名需要两个参数。不能只调用KillZombies(),需要将正确的参数传递给该方法 KillZombies(source, e); 如果没有源代码或e,只需传递null即可

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

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

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

KillZombies(source, e);
如果没有源代码或e,只需传递null即可

KillZombies(null, null);

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

您必须创建参数并将其传递给其他人。为什么不直接调用该函数,将其放入另一个可供其他类调用的函数中?这将使设计更加整洁

i、 e

您是否尝试过:

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();

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

KillZombies(this, new ElapsedEventArgs() { SignalTime = DateTime.Now});
如果在方法中没有真正使用source或e,可以使用null参数调用它

KillZombies(null, null);

从技术上讲,您应该将任务从事件处理程序内部分离出来,让事件处理程序调用包含要运行的代码的方法,这样您就可以调用该代码而不会使事件处理程序跳闸。但是,如果要以编程方式触发事件处理程序,请执行以下操作:

KillZombies(this, new ElapsedEventArgs())

不过,我会将其作为一种常用的最佳实践加以说明…

使用null,null似乎是一种不太混乱的解决方案。除了使用非良好实践代码之外,使用null,null还有什么危险吗?@Soo:不重复你自己肯定没什么错。干的我更喜欢阅读《杀手僵尸》(null,null),如果我在维护此代码。采用此方法是否存在任何危险?好的设计对于我的程序的这一特定方面不是非常重要。不,如果方法那么简单的话就不重要了。这不起作用,因为
ElapsedEventArgs
没有定义构造函数。
KillZombies(null, null);
KillZombies(this, new ElapsedEventArgs())