我有以下事件:
public delegate bool AccountEvent(string AccountId);
public static event AccountEvent AccountCreationCallback;
所以,在代码中我有这个:
Users.AccountCreationCallback += CreateWallet;
bool CreateWallet(string AccountId)
{
// do something
return true;
}
并以这种方式处理事件:
if (AccountCreationCallback != null)
{
return AccountCreationCallback(User._id);
}
return true;
所以,如果有一个事件并且它失败了,我会返回false;否则,是的。
现在,问题是如果我有多个事件会发生什么?
Users.AccountCreationCallback += CreateWallet;
Users.AccountCreationCallback += AttachAddress;
我真正想做的是能够有几个事件并且如果一个事件返回false就停止调用链。
可以用c#事件系统实现吗?
答案 0 :(得分:4)
您可以通过利用MulticastDelegate.GetInvocationList()
:
class EventEmitter
{
public event Func<bool> FooEvent;
public EventEmitter()
{
//....
}
private void Emit()
{
var handlers = FooEvent.GetInvocationList();
foreach (Func<bool> handler in handlers)
{
var result = handler();
if (!result)
{
break;
}
}
}
}
值得注意的是,调用列表的顺序是按照注册顺序排列的,但这是可能不应该依赖的实现细节,尤其是作为事件注册can be overridden