我发现自己经常需要以下代码场景
订阅事件 -> 等待事件 -> 取消订阅事件。
有没有比以下更好的方法:
myEvent += mydelegate;
while (mydelegatewasn't called)
{
// do stuff
}
myEvent -= mydelegate;
还有什么是等待我的代表完成工作的最佳方式?
我发现自己经常需要以下代码场景
订阅事件 -> 等待事件 -> 取消订阅事件。
有没有比以下更好的方法:
myEvent += mydelegate;
while (mydelegatewasn't called)
{
// do stuff
}
myEvent -= mydelegate;
还有什么是等待我的代表完成工作的最佳方式?
您可能需要考虑查看AutoResetEvent
类以等待您的委托完成其工作,而不是在 while 循环中旋转。这样可以避免在等待您的委托完成时旋转。
void Main()
{
RunActionOnceOnEvent(delegate()
{
// do stuff
});
}
void RunActionOnceOnEvent(Action action)
{
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
EventDelegate handler = delegate()
{
autoResetEvent.Set();
});
myEvent += handler;
try
{
autoResetEvent.WaitOne();
action();
}
finally
{
myEvent -= handler;
}
}
在减少不同事件的样板代码量方面,我不确定您能否做很多事情,因为事件不是一流的。