我的班级定义了我的活动:
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个不同的类中(相同的项目),但这不是问题......对吗?
答案 0 :(得分:5)
您在调用EventRaiserUtility
之前创建了一个新的updateListEvent
(顺便说一下,它应该有一个大写U
来遵循.NET约定; ditto updateList
=> UpdateList
) - 但您要创建单独的 EventRaiserUtility
才能订阅该活动。它们是不同的对象,因此具有不同的事件订阅者。如果您在提升活动之前始终创建新对象,那么永远不会成为任何订阅者。
你应该在包含类的实例变量中存储一个单 EventRaiserUtility
- 你在构造时创建它,然后在一个地方订阅该事件并将其引入另一个......但是因为他们正在谈论相同的EventRaiserUtility
对象,你不会失去订阅。
(目前尚不清楚这个实用程序类实际上有多大价值,说实话 - 为什么不直接在你的类中声明事件?为什么在EventHandler
完全相同时声明自己的委托签名?)
答案 1 :(得分:3)
据我所知 - 您正在订阅EventRaiserUtility
的一个实例的事件,但是从另一个没有订阅者的实例中引发事件
答案 2 :(得分:0)
你需要一个对象来真正拥有这个事件。也许这就是EventRaiserUtility,但你仍然需要在两个类中提供相同的实例。不知道这些类之间的关系