Если вы хотите узнать, не обработал ли какой-либо обработчик событий свою работу, вы можете либо сгенерировать исключение, либо предоставить собственный тип EventArgs, который отслеживает сбой любого обработчика событий.
public class FailureEventArgs : EventArgs // not the best name, I know
{
private bool _failed;
public bool Failed
{
get { return _failed; }
set { _failed |= value; }
}
}
Использование:
// Event declaration
public event EventHandler<FailureEventArgs> MyFailingEvent;
// Event invocation
private void Invoke()
{
bool failure = false;
var handler = MyFailingEvent;
if (handler != null)
{
var args = new FailureEventArgs();
handler(this, args);
failure = args.Failed;
}
// more code, aware of possible failure
}
// In your event handler
private void OnEvent(object sender, FailureEventArgs args)
{
var errorOccured = false;
// some code which could set errorOccured to true
args.Failure = errorOccured;
}
И, как уже упоминалось в моем комментарии выше, после завершения вызова события вы можете быть уверены, что обработчик прикрепленных событий больше не обрабатывается.