protected virtual void OnError(string message) { var e = MessageEventArgs.Error(message); MessageSent?.Invoke(this, e); throw new InvalidOperationException(); }