Если вам не нужно передавать какие-либо пользовательские аргументы обработчику событий, вы можете использовать делегат EventHandler по умолчанию, который использует базовые EventArgs.
Объявите события, которые вы хотите сделать доступными, следующим образом:
public event EventHandler EventReceived;
public event EventHandler ObjectReceived;
Объявите защищенный метод для каждого события, чтобы обработать его для вас. Это действительно просто удобство, чтобы не повторять это каждый раз, когда вам это нужно. Вы можете сделать это встроенным.
Ваши события будут нулевыми, если нет прикрепленных обработчиков событий. Метод обрабатывает проверку перед запуском события.
protected void RaiseEventReceived(EventArgs e)
{
if (EventReceived != null)
EventReceived(this, e);
}
Затем вызовите метод, когда вы хотите вызвать событие. Метод будет обрабатывать проверку, чтобы узнать, слушает ли кто-либо событие.
public void SomeOtherMethod()
{
while (IsConnected)
{
switch (CurrentState)
{
case CurrentServerState.EventReceived:
RaiseEventReceived(EventArgs.Empty);
break;
case CurrentServerState.ObjectReceived:
RaiseObjectReceived(EventArgs.Empty);
break;
}
}
}
Вы можете объявить свой собственный класс для передачи пользовательских аргументов обработчикам событий, используя производные от EventArgs, такие как следующие. По соглашению ваш класс должен называться * что-то * EventArgs.
public class EventReceivedEventArgs : EventArgs
{
// Declare properties to hold additional event info here
}
Тогда вам нужно будет объявить пользовательский делегат, который принимает ваш новый параметр args события:
public delegate void EventReceivedEventHandler(object sender, EventReceivedEventArgs e);
Обновите объявления событий, чтобы использовать новый тип делегата вместо EventHandler:
public event EventReceivedEventHandler EventReceived;
И, наконец, при вызове события вы, конечно, захотите создать новый экземпляр вашего класса аргументов пользовательского события и инициализировать ваши пользовательские свойства.
Клиенты могут присоединять к вашим событиям несколько обработчиков, используя обычный синтаксис, и они всегда будут вызываться в правильном потоке.