c# - 如何在 C# 中使用事件?

标签 c# events event-handling event-listener

我对 c# 中的事件完全陌生,这就是我想做的:

我有两种方法:

OpenPage1();    
OpenPage2();

当调用这些方法中的任何一个时,我想要调用名为 PerformSomeTask() 的第三个方法。

我相信这可以通过事件处理来完成。谁能告诉我该怎么做?

最佳答案

您在类里面所要做的就是添加一个具有正确事件处理程序的事件(在您的示例中为 Action)。 eventHandler 应该对应于将订阅此事件的方法。 然后从 openPage 方法触发事件。 如果没有人订阅此事件,您必须检查是否为 null。

public class Foo
{
    public event Action theEvent;

    public void OpenPage1()
    {
        if (theEvent != null)
            theEvent();
    }

    public void OpenPage2()
    {
        if (theEvent != null)
            theEvent();
    }
}

public class Bar
{
    public int Counter { get; set; }

    public void PerformSomeTask()
    {
        Counter++;
    }        
}

这里有一个测试,您可以运行以查看所有内容:

[TestMethod]
public void TestMethod1()
{
    var foo = new Foo();
    var bar = new Bar();
    foo.theEvent += bar.PerformSomeTask;

    foo.OpenPage1();
    foo.OpenPage2();

    Assert.AreEqual(2, bar.Counter);
}

关于c# - 如何在 C# 中使用事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29251982/

相关文章:

c# - 为什么 C# 标准消息循环不会大幅增加 CPU 使用率

c# - Ninject.MVC 构造函数注入(inject),其中注入(inject)对象的构造函数采用参数

javascript - 为什么在事件处理程序函数外部定义的函数需要保存在事件处理程序内部的新变量中?

javascript - 为什么我无法让每个 tr 标记的事件发挥作用?

jquery - 如何将多个模板之一的 Meteor 助手设置为 true?

c# - 如何从另一个类访问表单元素

c# - 如何在 Windows 窗体应用程序中依次播放两种声音?

java - SWT 中的鼠标事件

apache-flex - 监听EventDispatcher的所有事件类型

events - 异步和事件