Я хочу передать событие в метод. У меня есть следующий код, но что я могу поставить для типа «XXX»?
internal class Retriever<TEventArgs> where TEventArgs : EventArgs
{
public Retriever( XXX event, EventHandler<TEventArgs> handler )
{
_event = event;
_handler = handler;
_event += handler;
}
XXX _event;
EventHandler<TEventArgs> _handler;
}
Редактировать : Разработка вопроса. Я пытаюсь написать универсальную защиту событий, на которую подписывается событие до наступления события и отписывается после того, как событие произошло. Этот класс будет выглядеть так:
internal class EventGuard<TEventArgs> : IDisposable where TEventArgs : EventArgs
{
public Retriever( XXX event, EventHandler<TEventArgs> handler )
{
_event = event;
_handler = handler;
_event += handler;
}
XXX _event;
EventHandler<TEventArgs> _handler;
public void Dispose()
{
_event -= _handler;
}
}
и я бы использовал его следующим образом. Proxy.RetrieveAsync
- это веб-метод, который после завершения вызовет событие Proxy.RetrieveCompleted
. Тело обработчика завершения HandleRetrieveCompleted
, которое не показано, вызовет Set () для ManualResetEvent (переданного как объект UserState).
using ( new EventGuard<EventArgs>( Proxy.RetrieveCompleted, new EventHandler<EventArgs>( HandleRetrieveCompleted) ) )
{
ManualResetEvent resetEvent = new ManualResetEvent();
Proxy.RetrieveAsync(resetEvent);
resetEvent.WaitOne();
}