




Вы можете вызвать событие только из класса, в котором вы его объявили. В любом другом месте вы можете добавлять или удалять обработчики из делегата события только с помощью операторов += и -=, отсюда и сообщение об ошибке.
Также вы можете посмотреть этот пост о избегая проверки нулевых делегатов
Если вы пытаетесь использовать событие из другого класса, вам необходимо понимать разницу между событиями и делегатами. Событие просто инкапсулирует аспекты «подписаться» и «отказаться от подписки», а не «инициировать событие». (Фактически, в IL у вас есть член может для «поднять событие», но C# его не поддерживает.)
Подробнее см. моя статья о мероприятиях и делегатах.
Я всегда удивлялся, что C# не поддерживает метод Raise с тех пор, как VB и даже C++ / CLI поддерживают, и иногда это довольно удобно. Вы знаете причину этого решения?
На мой взгляд, это нарушает инкапсуляцию. Класс должен сам отвечать за возникновение событий - шаблон событий является наблюдательным. Я никогда не сталкивался с ситуацией, когда я хотел бы вызвать событие "извне", но имел причину хорошо для этого (а не какой-то грубый дизайн в другом месте).
+ = связан с событиями, а не только с объявлением делегата. Вам не хватает ключевого слова "событие".
public **event** MyDelegate MyEvent;
Когда у вас есть это ключевое слово, + = будет работать на вас.
Ознакомьтесь с Chris Sells Делегаты .NET: сказка на ночь на C#, чтобы получить отличное руководство для делегатов и мероприятий. Информативно и довольно занимательно.
Какой код вы используете для вызова этого события?