Push AddonLifecycle event register/unregister to main thread

This commit is contained in:
MidoriKami 2026-01-04 14:03:15 -08:00
parent 9538af0554
commit 1398054216

View file

@ -27,6 +27,9 @@ internal unsafe class AddonLifecycle : IInternalDisposableService
private static readonly ModuleLog Log = new("AddonLifecycle"); private static readonly ModuleLog Log = new("AddonLifecycle");
[ServiceManager.ServiceDependency]
private readonly Framework framework = Service<Framework>.Get();
private Hook<AtkUnitBase.Delegates.Initialize>? onInitializeAddonHook; private Hook<AtkUnitBase.Delegates.Initialize>? onInitializeAddonHook;
[ServiceManager.ServiceConstructor] [ServiceManager.ServiceConstructor]
@ -57,6 +60,8 @@ internal unsafe class AddonLifecycle : IInternalDisposableService
/// </summary> /// </summary>
/// <param name="listener">The listener to register.</param> /// <param name="listener">The listener to register.</param>
internal void RegisterListener(AddonLifecycleEventListener listener) internal void RegisterListener(AddonLifecycleEventListener listener)
{
this.framework.RunOnFrameworkThread(() =>
{ {
if (!this.EventListeners.ContainsKey(listener.EventType)) if (!this.EventListeners.ContainsKey(listener.EventType))
{ {
@ -72,6 +77,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService
} }
this.EventListeners[listener.EventType][listener.AddonName].Add(listener); this.EventListeners[listener.EventType][listener.AddonName].Add(listener);
});
} }
/// <summary> /// <summary>
@ -79,6 +85,8 @@ internal unsafe class AddonLifecycle : IInternalDisposableService
/// </summary> /// </summary>
/// <param name="listener">The listener to unregister.</param> /// <param name="listener">The listener to unregister.</param>
internal void UnregisterListener(AddonLifecycleEventListener listener) internal void UnregisterListener(AddonLifecycleEventListener listener)
{
this.framework.RunOnFrameworkThread(() =>
{ {
if (this.EventListeners.TryGetValue(listener.EventType, out var addonListeners)) if (this.EventListeners.TryGetValue(listener.EventType, out var addonListeners))
{ {
@ -87,6 +95,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService
addonListener.Remove(listener); addonListener.Remove(listener);
} }
} }
});
} }
/// <summary> /// <summary>