如何在一类中通知所有订户类引发事件?

问题描述

我正在学习如何在类周围使用事件来通知2个类,如果一个类中出现偶数事件。我创建了以下内容。

namespace TestConsole
{
    class Program : Form
    {
        public event EventHandler Something;
        public Program()
        {
            Button btn = new Button();
            btn.Parent = this;
            btn.Text = "Click Me.!";
            btn.Location = new Point(100,100);
            btn.Click += Btn_Click;
            Something += HandleThis;
        }

        private void Btn_Click(object sender,EventArgs e)
        {
            
            Something(this,null);
        }
        private void HandleThis(object sender,EventArgs e)
        {
            Console.WriteLine("From Main: Something typed");
        }
        static void Main(string[] args)
        {
            Application.Run(new Program());
            Console.ReadLine();
        }
    }
    class One
    {
        One()
        {
            Program SubscriberObj = new Program();
            SubscriberObj.Something += HandleEvent;
        }

        private void HandleEvent(object sender,EventArgs e)
        {
            Console.WriteLine("From One: Something typed");
        }
    }

    class Two
    {
        Two()
        {
            Program SubscriberObj = new Program();
            SubscriberObj.Something += HandleEvent;
        }

        private void HandleEvent(object sender,EventArgs e)
        {
            Console.WriteLine("From Two: Something typed");
        }

    }

}

我希望在单击按钮后同时触发Class 1和Class 2的HandleEvent方法。但是我看到事件仅在Program类中引发。如何实现呢?

解决方法

您没有创建OneTwo的实例。因此,没有任何班级将注册此事件。另外,您在programOne中创建Two的新实例。但是,您需要触发事件的实例相同。您必须在构造函数中传递program的实例。您还应该在事件触发时始终检查处理程序是否为null。

    EventHandler handler = Something;
    handler?.Invoke(this,new EventArgs());

此代码等效于:

    EventHandler handler = Something;
    if (handler != null)
    {
        handler.Invoke(this,new EventArgs());
    }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...