Я думаю, что вы путали события с делегатами. Только класс, выставляющий событие, может поднять его ... Другие могут только подписаться-отписаться на него. Если вы вызываете событие из класса, объявляющего событие, оно должно работать как обычный делегат.
Лучшая страница, которую я смог найти на События против делегатов . Читать вверх ..
Можете ли вы опубликовать большой фрагмент кода?
Обновление убийцы
Мне кажется, я наконец-то вижу вашу проблему и способы ее решения.
Краткий ответ: Он не знает имя делегата, который нужно вызвать, если вы пишете свои собственные методы доступа. Если вы не .. компилятор добавляет приватный делегат с известным именем и, следовательно, может вызвать его
Этот фрагмент кода показывает, что я имею в виду. Эта статья MSDN показала мне свет . Отличный вопрос, чувак .. Я потерял 30 минут. Upvoted:)
public class Hash1
{
private EventHandler myHomeMadeDelegate;
public event EventHandler FancyEvent
{
add
{
//myDelegate += value;
myHomeMadeDelegate = (EventHandler)Delegate.Combine(myHomeMadeDelegate, value);
}
remove
{
//myDelegate -= value;
myHomeMadeDelegate = (EventHandler)Delegate.Remove(myHomeMadeDelegate, value);
}
}
public event EventHandler PlainEvent;
public Hash1()
{
FancyEvent += new EventHandler(On_Hash1_FancyEvent);
PlainEvent += new EventHandler(On_Hash1_PlainEvent);
// FancyEvent(this, EventArgs.Empty); //won't work:What is the backing delegate called? I don't know
myHomeMadeDelegate(this, EventArgs.Empty); // Aha!
PlainEvent(this, EventArgs.Empty);
}
void On_Hash1_PlainEvent(object sender, EventArgs e)
{
Console.WriteLine("Bang Bang!");
}
void On_Hash1_FancyEvent(object sender, EventArgs e)
{
Console.WriteLine("Bang!");
}
}