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个不同的类(同一个项目)中,但这不是问题。。。正确的
您在调用updateListEvent
之前创建了一个新的EventRaiserUtility
(顺便说一句,它应该有一个大写的U
来遵循.NET约定;updateList
=>UpdateList
也是如此),但您正在创建一个单独的EventRaiserUtility
来订阅事件。它们是不同的对象,因此有不同的事件订阅者。如果您总是在引发事件之前创建一个新对象,则可能永远不会有任何订阅者。
您应该在包含类的实例变量中存储一个单个EventRaiserUtility
-您可以在构造时创建它,然后在一个位置订阅事件,并在另一个位置引发它。。。但因为他们谈论的是同一个EventRaiserUtility
对象,所以您不会失去订阅。
(老实说,还不清楚这个实用程序类是否真的有多大价值-为什么不直接在类中声明事件?当EventHandler
具有完全相同的签名时,为什么要声明自己的委托?)
据我所见,您订阅了EventRaiserUtility
的一个实例的事件,但从另一个没有订阅方的实例引发了事件
您需要一个对象来真正拥有事件。也许这就是EventRaiserUtility,但您仍然需要在两个类中提供相同的实例。在不知道这些类之间的关系的情况下