EventHandler отсутствует, не знаю, как инициализировать

Я просто хотел использовать код из этот поток (первый пост), чтобы что-то проверить, я не очень хорошо знаком с C#, но он вылетает, когда пакет отправляется на сервер в следующей строке:

NewMessageReceived(this, new MyMessageArgs(bytes));

со следующим сообщением об ошибке:

System.NullReferenceException: Object reference not set to an instance of an object

Я думаю, потому что NewMessageReceived не инициализирован, но как мне это сделать? Кто-нибудь может мне помочь? Я не могу найти полезных советов по обработчикам событий в C#.

Заранее спасибо.


person fgroeger    schedule 15.06.2016    source источник
comment
Если никто не подписался на NewMessageReceived, обработчик будет null. Таким образом, вам нужно обнулить NewMessageReceived перед вызовом. Для обеспечения безопасности потоков, предотвращения ситуаций, когда обработчик может стать нулевым после проверки и перед вызовом, сначала сохраните обработчик события в локальном: var tempEvent = NewMessageReceived; if(tempEvent != null) tempEvent(this, new MyMessageArgs(bytes));   -  person Glorin Oakenfoot    schedule 15.06.2016
comment
Отладьте, чтобы увидеть, содержат ли байты нулевую ссылку.   -  person JDupont    schedule 15.06.2016


Ответы (1)


У события должен быть хотя бы 1 подписчик, чтобы вы могли его поднять. Перед вызовом поставьте нулевую проверку.

if (NewMessageReceived != null)
{
    NewMessageReceived(this, new MyMessageArgs(bytes));
}
person Bryan Vam    schedule 15.06.2016