C#-自定义引发事件的问题

本文关键字:问题 事件 自定义 C#- | 更新日期: 2023-09-27 18:26:05

我在类中定义了我的事件:

public class EventRaiserUtility
{
    public event EventHandler updateList;
    public void updateListEvent()
    {
        if (updateList != null)
        {
            updateList(this, EventArgs.Empty);
        }
    }
    public static EventRaiserUtility raiser = new EventRaiserUtility();
}

这就是我提出我的事件的地方:

EventRaiserUtility.raiser.updateListEvent();

最后,这就是我试图创建监听器的地方:

...
EventRaiserUtility.raiser.updateList += new EventHandler(raiser_updateList);
//placed in the init method of another class
...
private void raiser_updateList(object sender, EventArgs e)
{
    connType = MainWindowViewModel.getTTC();
}

简单地说:当一个列表被更新时,这个事件必须通知,然后用getTTC()raiser_updateList更新另一个列表。

但是raiser_updateList从未被调用。为什么?我所有的3段代码都在3个不同的类(同一个项目)中,但这不是问题。。。正确的

C#-自定义引发事件的问题

您在调用updateListEvent之前创建了一个新的EventRaiserUtility(顺便说一句,它应该有一个大写的U来遵循.NET约定;updateList=>UpdateList也是如此),但您正在创建一个单独的EventRaiserUtility来订阅事件。它们是不同的对象,因此有不同的事件订阅者。如果您总是在引发事件之前创建一个新对象,则可能永远不会有任何订阅者。

您应该在包含类的实例变量中存储一个单个EventRaiserUtility-您可以在构造时创建它,然后在一个位置订阅事件,并在另一个位置引发它。。。但因为他们谈论的是同一个EventRaiserUtility对象,所以您不会失去订阅。

(老实说,还不清楚这个实用程序类是否真的有多大价值-为什么不直接在类中声明事件?当EventHandler具有完全相同的签名时,为什么要声明自己的委托?)

据我所见,您订阅了EventRaiserUtility的一个实例的事件,但从另一个没有订阅方的实例引发了事件

您需要一个对象来真正拥有事件。也许这就是EventRaiserUtility,但您仍然需要在两个类中提供相同的实例。在不知道这些类之间的关系的情况下