我想将事件传递给方法。我的代码如下,但是我为“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
是一种网络方法,完成后将导致发起事件。完成处理程序HandleRetrieveCompleted
的主体(未显示)将调用ManualResetEvent(作为UserState对象传入)的Set()。
using (new EventGuard<EventArgs>(Proxy.RetrieveCompleted, new EventHandler<EventArgs>(HandleRetrieveCompleted)))
{
ManualResetEvent resetEvent = new ManualResetEvent();
Proxy.RetrieveAsync(resetEvent);
resetEvent.WaitOne();
}
我已经编辑了这个问题,以提供更多关于我想要实现的内容的内容。 – 2010-02-12 04:15:06
呃,这与多个类无法发布相同事件以及使用强引用*(C#程序中内存泄漏的第一个原因)*以及令人难以置信的**不必要冗长的事件他们使用的语法*(必须手动检查每个调用中的空值?真的!?)* ...我认为事件需要C#5.0的完整返工 – 2012-08-08 18:22:48
@ BlueRaja-DannyPflughoeft我认为代码冗长的情况也是如此,有关.NET事件的更多问题和限制。为了解决这个问题,或者至少有一个很好的选择,我写了一些可用的代码,请查阅这篇文章:http://www.codeproject.com/Articles/864690/Simplifying-Events-in-NET以获取更多信息。 – 2015-01-30 07:58:59