mirror of
https://github.com/Maassoft/ColorControl.git
synced 2026-10-21 08:09:49 -05:00
65 lines
1.9 KiB
C#
65 lines
1.9 KiB
C#
using static ColorControl.Shared.EventDispatcher.EventExtensions;
|
|
|
|
namespace ColorControl.Shared.EventDispatcher;
|
|
|
|
public class EventDispatcher<T> where T : EventArgs
|
|
{
|
|
private Dictionary<string, EventHandler<T>> eventHandlers = new Dictionary<string, EventHandler<T>>();
|
|
private Dictionary<string, AsyncEventHandler<T>> asyncEventHandlers = new Dictionary<string, AsyncEventHandler<T>>();
|
|
|
|
public void RegisterEventHandler(string eventName, EventHandler<T> eventHandler)
|
|
{
|
|
if (!eventHandlers.ContainsKey(eventName))
|
|
{
|
|
eventHandlers.Add(eventName, eventHandler);
|
|
}
|
|
else
|
|
{
|
|
eventHandlers[eventName] += eventHandler;
|
|
}
|
|
}
|
|
|
|
public void RegisterAsyncEventHandler(string eventName, AsyncEventHandler<T> eventHandler)
|
|
{
|
|
if (!asyncEventHandlers.ContainsKey(eventName))
|
|
{
|
|
asyncEventHandlers.Add(eventName, eventHandler);
|
|
}
|
|
else
|
|
{
|
|
if (!asyncEventHandlers[eventName].GetInvocationList().Any(il => il.Target == eventHandler.Target))
|
|
{
|
|
asyncEventHandlers[eventName] += eventHandler;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void UnregisterEventHandler(string eventName)
|
|
{
|
|
eventHandlers.Remove(eventName);
|
|
}
|
|
|
|
public void DispatchEvent(string eventName, T eventArgs)
|
|
{
|
|
if (eventHandlers.ContainsKey(eventName))
|
|
{
|
|
eventHandlers[eventName]?.Invoke(this, eventArgs);
|
|
}
|
|
}
|
|
|
|
public async Task DispatchEventAsync(string eventName, T eventArgs)
|
|
{
|
|
if (asyncEventHandlers.ContainsKey(eventName))
|
|
{
|
|
await asyncEventHandlers[eventName]?.InvokeAsync(this, eventArgs);
|
|
}
|
|
|
|
DispatchEvent(eventName, eventArgs);
|
|
}
|
|
|
|
protected bool HasHandlers(string eventName)
|
|
{
|
|
return eventHandlers.ContainsKey(eventName) || asyncEventHandlers.ContainsKey(eventName);
|
|
}
|
|
}
|