我想将一个事件传递到一个方法中。我已经写好了下面的代码,但是我应该在类型 "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
是一个Web方法,完成后会触发Proxy.RetrieveCompleted
事件。 完成处理程序HandleRetrieveCompleted
的主体(未显示)将在手动重置事件上调用Set(传递为UserState对象)。
using ( new EventGuard<EventArgs>( Proxy.RetrieveCompleted, new EventHandler<EventArgs>( HandleRetrieveCompleted) ) )
{
ManualResetEvent resetEvent = new ManualResetEvent();
Proxy.RetrieveAsync(resetEvent);
resetEvent.WaitOne();
}
Click?.Invoke(this, args)
。 - Jon Skeet