0

我有我定义我的事件的类:

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()简单地说:此事件必须在更新列表时通知,然后使用with更新另一个列表raiser_updateList

raiser_updateList永远不会被调用。为什么?我所有的 3 个代码片段都在 3 个不同的类(同一个项目)中,但这不是问题......对吗?

4

3 回答 3

5

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

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

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

于 2014-10-10T09:19:47.100 回答
3

据我所见 - 您正在订阅 的一个实例的EventRaiserUtility事件,但从另一个没有订阅者的实例引发事件

于 2014-10-10T09:21:37.283 回答
0

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

于 2014-10-10T09:45:10.850 回答