Может ли событие использоваться в качестве прослушивателя событий? - PullRequest
0 голосов
/ 14 ноября 2009

Я пытаюсь выставить некоторые события из закрытого объекта, который содержится внутри объекта, который я создаю, и похоже, что компилятор доволен этим:

private WindowUpdateServer _windowUpdateServer;

public event WindowUpdateHandler WindowUpdated;

public RecieveWindowFramesManager() {

    _windowUpdateServer = new WindowUpdateServer();

    _windowUpdateServer.ExistingWindowUpdated += WindowUpdated; // ExistingWindowUpdated is a WindowUpdateHandler
}

Но после инициализации RecieveWindowFramesManager _windowUpdateServer.ExistingWindowUpdated == null.

Я что-то здесь упускаю - кажется, это должно работать?

Стоит отметить, что после инициализации RecieveWindowFramesManager я присоединяю прослушиватель событий к WindowUpdated, но он никогда не вызывается (даже если _windowUpdateServer.ExistingWindowUpdated срабатывает).

Ответы [ 2 ]

6 голосов
/ 14 ноября 2009

Я не уверен, но я думаю, что это только назначает те обработчики из события WindowUpdated, которые были установлены, когда имела место операция + =. Поскольку это конструктор, список был пуст. Чтобы сделать то, что вы хотите, создайте свой собственный обработчик события для ExistingWindowUpdated и запустите оттуда событие WindowUpdated.

4 голосов
/ 14 ноября 2009

Я бы сделал что-то вроде этого:

public event WindowUpdateEventHandler WindowUpdated
{ 
    add{ _windowUpdateServer.ExistingWindowUpdated += value; }
    remove{ _windowUpdateServer.ExistingWindowUpdated -= value; }
}

Есть некоторые проблемы, если вы действительно используете аргумент отправителя в обработчиках событий; он будет указывать на внутренний объект, а не на тот, от которого вы получаете события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...