3using System.Threading.Tasks;
40 #region Synchronous event handlers, non-communication-layers
48 public static bool Raise(
this EventHandler EventHandler,
object Sender)
50 return Raise(EventHandler, Sender, EventArgs.Empty,
false);
61 public static bool Raise(
this EventHandler EventHandler,
object Sender,
bool Decoupled)
63 return Raise(EventHandler, Sender, EventArgs.Empty, Decoupled);
73 public static bool Raise(
this EventHandler EventHandler,
object Sender, EventArgs e)
75 return EventHandler.Raise(Sender, e,
false);
87 public static bool Raise(
this EventHandler EventHandler,
object Sender, EventArgs e,
bool Decoupled)
89 if (!(EventHandler is
null))
97 EventHandler(Sender, e);
109 EventHandler(Sender, e);
129 public static bool Raise<T>(
this EventHandler<T> EventHandler,
object Sender, T e)
131 return EventHandler.Raise(Sender, e,
false);
143 public static bool Raise<T>(
this EventHandler<T> EventHandler,
object Sender, T e,
bool Decoupled)
145 if (!(EventHandler is
null))
153 EventHandler(Sender, e);
165 EventHandler(Sender, e);
180 #region Synchronous event handlers, communication layers
203 return Raise(EventHandler, Sender, EventArgs.Empty, Decoupled);
215 return EventHandler.Raise(Sender, e, Sender?.DecoupledEvents ??
false);
229 if (EventHandler is
null)
230 Sender.NoEventHandlerWarning(e);
233 Task
_ = Task.Run(() =>
237 EventHandler(Sender, e);
243 if (!(Sender is
null))
249 catch (Exception ex2)
263 EventHandler(Sender, e);
281 private static void NoEventHandlerWarning(
this IObservableLayer Sender,
object e)
286 StringBuilder sb =
new StringBuilder();
288 sb.Append(
"No event handler registered (");
289 sb.Append(Sender.GetType().FullName);
291 sb.Append(e.GetType().FullName);
306 return EventHandler.Raise(Sender, e, Sender?.DecoupledEvents ??
false);
320 if (EventHandler is
null)
321 Sender.NoEventHandlerWarning(e);
324 Task
_ = Task.Run(() =>
328 EventHandler(Sender, e);
334 if (!(Sender is
null))
340 catch (Exception ex2)
354 EventHandler(Sender, e);
369 #region Asynchronous event handlers, non-communication-layers
379 return Raise(EventHandler, Sender, EventArgs.Empty,
false);
392 return Raise(EventHandler, Sender, EventArgs.Empty, Decoupled);
404 return EventHandler.Raise(Sender, e,
false);
418 if (!(EventHandler is
null))
422 Task
_ = Task.Run(async () =>
426 await EventHandler(Sender, e);
438 await EventHandler(Sender, e);
458 public static Task<bool>
Raise<T>(
this EventHandlerAsync<T> EventHandler,
object Sender, T e)
460 return EventHandler.Raise(Sender, e,
false);
472 public static async Task<bool>
Raise<T>(
this EventHandlerAsync<T> EventHandler,
object Sender, T e,
bool Decoupled)
474 if (!(EventHandler is
null))
478 Task
_ = Task.Run(async () =>
482 await EventHandler(Sender, e);
494 await EventHandler(Sender, e);
509 #region Asynchronous event handlers, communication layers
532 return Raise(EventHandler, Sender, EventArgs.Empty, Decoupled);
544 return EventHandler.Raise(Sender, e, Sender?.DecoupledEvents ??
false);
558 if (EventHandler is
null)
559 Sender.NoEventHandlerWarning(e);
562 Task
_ = Task.Run(async () =>
566 await EventHandler(Sender, e);
572 if (!(Sender is
null))
578 catch (Exception ex2)
592 await EventHandler(Sender, e);
614 return EventHandler.Raise(Sender, e, Sender?.DecoupledEvents ??
false);
628 if (EventHandler is
null)
629 Sender.NoEventHandlerWarning(e);
632 Task
_ = Task.Run(async () =>
636 await EventHandler(Sender, e);
642 if (!(Sender is
null))
648 catch (Exception ex2)
662 await EventHandler(Sender, e);
677 #region Synchronous callback functions
684 public static void Call<ArgT>(
this Callback<ArgT> Callback, ArgT Argument)
686 if (!(Callback is
null))
701 #region Asynchronous callback functions
708 public static async Task
Call<ArgT>(
this CallbackAsync<ArgT> Callback, ArgT Argument)
710 if (!(Callback is
null))
714 await Callback(Argument);
Static class with method extensions simplifying raising events.
static Task< bool > Raise(this EventHandlerAsync EventHandler, object Sender, EventArgs e)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static Task< bool > Raise(this EventHandlerAsync EventHandler, object Sender)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise(this EventHandler EventHandler, object Sender, EventArgs e)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise< T >(this EventHandler< T > EventHandler, object Sender, T e)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static Task< bool > Raise(this EventHandlerAsync EventHandler, IObservableLayer Sender)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise(this EventHandler EventHandler, IObservableLayer Sender)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise(this EventHandler EventHandler, IObservableLayer Sender, bool Decoupled)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static async Task< bool > Raise(this EventHandlerAsync EventHandler, IObservableLayer Sender, EventArgs e, bool Decoupled)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise(this EventHandler EventHandler, object Sender, EventArgs e, bool Decoupled)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static void Call< ArgT >(this Callback< ArgT > Callback, ArgT Argument)
Calls a callback function. Any exceptions are trapped and logged.
static Task< bool > Raise(this EventHandlerAsync EventHandler, IObservableLayer Sender, bool Decoupled)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static async Task< bool > Raise(this EventHandlerAsync EventHandler, object Sender, EventArgs e, bool Decoupled)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise(this EventHandler EventHandler, IObservableLayer Sender, EventArgs e)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static Task< bool > Raise(this EventHandlerAsync EventHandler, object Sender, bool Decoupled)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise(this EventHandler EventHandler, object Sender)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise(this EventHandler EventHandler, object Sender, bool Decoupled)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static Task< bool > Raise(this EventHandlerAsync EventHandler, IObservableLayer Sender, EventArgs e)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
static bool Raise(this EventHandler EventHandler, IObservableLayer Sender, EventArgs e, bool Decoupled)
Raises an event, if handler is defined. Any exceptions are trapped and logged.
Static class managing the application event log. Applications and services log events on this static ...
static void Exception(Exception Exception, string Object, string Actor, string EventId, EventLevel Level, string Facility, string Module, params KeyValuePair< string, object >[] Tags)
Logs an exception. Event type will be determined by the severity of the exception.
Interface for classes that can be observed.
void Exception(string Exception)
Called to inform the viewer of an exception state.
bool DecoupledEvents
If events raised from the communication layer are decoupled, i.e. executed in parallel with the sourc...
void Warning(string Warning)
Called to inform the viewer of a warning state.
delegate Task CallbackAsync< in T >(T Arg)
Asynchronous callback function with one argument.
delegate Task EventHandlerAsync< in T >(object Sender, T e)
Asynchronous version of EventArgs with a typed event arguments.
delegate Task EventHandlerAsync(object Sender, EventArgs e)
Asynchronous version of EventArgs.
delegate void Callback< in T >(T Arg)
Callback function with one argument.