Ответ 1
Вам нужно объявить свое событие, используя EventHandler<T>
, где T
- ваш класс, который происходит от EventArgs
:
public event EventHandler<LoginCompletedEventArgs> LoginCompleted;
LoginCompletedEventArgs
может выглядеть так:
public class LoginCompletedEventArgs : EventArgs
{
private readonly YourBusinessObject _businessObject;
public LoginCompletedEventArgs(YourBusinessObject businessObject)
{
_businessObject = businessObject;
}
public YourBusinessObject BusinessObject
{
get { return _businessObject; }
}
}
Использование будет таким:
private void RaiseLoginCompleted(YourBusinessObject businessObject)
{
var handler = LoginCompleted;
if(handler == null)
return;
handler(this, new LoginCompletedEventArgs(businessObject));
}
Обратите внимание, как я реализовал RaiseLoginCompleted
. Это поточно-безопасная версия для поднятия события. Я исключаю возможный NullReferenceException
, который может возникать в сценарии условий гонки, когда один поток хочет поднять событие, а другой поток не подписывает последний обработчик после проверки if
, но до фактического вызова обработчика.