如何在单独的类中监听事件

问题描述 投票:0回答:1

我是 C# 新手,我有一个关于事件处理程序以及如何监听另一个类的事件处理程序的问题。请参阅下面的伪代码。我创建了两个类。我有一个类有一个事件,还有一个类需要由事件更新。我目前正在

main
中订阅该事件,然后将数据传递到
MyClass2
。我需要如何编写代码
MyClass2
,以便它可以直接监听事件,而不必在 main 中订阅并传递数据。这可能吗?一个好主意?还是我应该继续按现在的方式做?感谢您提前提供帮助。

public class MyClass1
{
      public event EventHandler<DeviceEventArgs> StatusChange;

      protected override void OnStatusChange(DeviceEventArgs e)
      {
             StatusChange?.Invoke(this, e);
      }

}

public class MyClass2
{

      public void ListenToClass1Event()
      {

      }
      public void UpdateStatusChange()
      {

      }
}
void main
{
      MyClass1 a = new MyClass1();
      MyClass2 b = new MyClass2();

     //i already know I can do this
     a.StatusChange += StatusChangeEvent;

     *//is there a way to just listen to the event in another class
     // so I dont have to write code in main or another class
     ???? b.ListenToClass1Event = a.OnStatusChange ????*
}
private void StatusChangeEvent(object sender, DeviceEventArgs e)
{
    b.UpdateStatusChange();
}


我一直按照我知道的方式来做,我想看看第二种方法是否可行,和/或一个好主意或实践。

c# class events
1个回答
0
投票

您可以在构造函数中将

MyClass1
的引用传递给
MyClass2
,然后第二个类可以订阅该事件:

public class MyClass2
{
    public MyClass2(MyClass1 a)
    {
        a.StatusChange += A_StatusChange;
    }

    private void A_StatusChange(object sender, DeviceEventArgs e)
    {
        // Listen To Class1 Event
    }
}

像这样初始化:

MyClass1 a = new MyClass1();
MyClass2 b = new MyClass2(a); // <== pass a to b
© www.soinside.com 2019 - 2024. All rights reserved.