29 lines
1,022 B
C#
29 lines
1,022 B
C#
|
using System;
|
||
|
using GamecraftModdingAPI.Events;
|
||
|
|
||
|
namespace GamecraftModdingAPI.Utility
|
||
|
{
|
||
|
public static class ExceptionUtil
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Invokes an event in a try-catch block to avoid propagating exceptions.
|
||
|
/// </summary>
|
||
|
/// <param name="handler">The event to emit, can be null</param>
|
||
|
/// <param name="sender">Event sender</param>
|
||
|
/// <param name="args">Event arguments</param>
|
||
|
/// <typeparam name="T">Type of the event arguments</typeparam>
|
||
|
public static void InvokeEvent<T>(EventHandler<T> handler, object sender, T args)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
handler?.Invoke(sender, args);
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
EventRuntimeException wrappedException =
|
||
|
new EventRuntimeException($"EventHandler with arg type {typeof(T).Name} threw an exception", e);
|
||
|
Logging.LogWarning(wrappedException.ToString());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|