Похоже, что на самом деле у вас есть 2 события newPublication: одно в подписчике и одно в издателе. Вы поднимаете один в Publisher, но подписчики подписываются только на собственное событие.
Вот как должен работать ваш класс подписчика:
private String m_Name;
private Publisher m_Publisher;
public Subscriber(String name, Publisher publisher) {
m_Name = name;
m_Publisher = publisher;
m_Publisher.newPublication += new NewPublication(subscriber_newPublication);
}
public void subscriber_newPublication(Publisher fromPublisher, String Message) {
MessageBox.Show(m_Name + " is notified for " + Message);
}
Для простоты использования вы можете захотеть ввести метод Subscribe для вашего класса Publisher, например так:
public Subscriber Subscribe(String name)
{
return new Subscriber(name, this);
}
Обратите внимание, что обработчики событий, которые присоединены, но никогда не отсоединяются, могут вызвать утечки памяти в вашем приложении .NET. Всегда используйте оператор - = для отсоединения обработчиков событий, когда они вам больше не нужны (например, в приложении WinForms я обычно отсоединяю обработчики событий для событий управления, когда происходит событие FormClosed). Здесь - хорошая статья, которая подробно объясняет это, а здесь - еще одна статья, которая демонстрирует обнаружение утечек памяти.
Для расширенной концепции событий вы можете ознакомиться с F # и моделью событий Reactive Framework (которые также не имеют утечек памяти), как описано в этой серии статей .