Files
EmoneyFiddlerPlugins/ICSharpCode.TextEditor/Project/Utils/WeakEventHandler.cs
2026-01-07 11:33:05 +08:00

38 lines
1.1 KiB
C#

using System;
using System.Diagnostics;
using System.Reflection;
namespace ICSharpCode.TextEditor.Utils
{
/// <summary>
/// http://paulstovell.com/blog/weakevents
/// </summary>
/// <typeparam name="TEventArgs">The type of the event args.</typeparam>
[DebuggerNonUserCode]
public sealed class WeakEventHandler<TEventArgs> where TEventArgs : EventArgs
{
private readonly WeakReference _targetReference;
private readonly MethodInfo _method;
public WeakEventHandler(EventHandler<TEventArgs> callback)
{
_method = callback.Method;
_targetReference = new WeakReference(callback.Target, true);
}
[DebuggerNonUserCode]
public void Handler(object sender, TEventArgs e)
{
var target = _targetReference.Target;
if (target != null)
{
var callback = (Action<object, TEventArgs>)Delegate.CreateDelegate(typeof(Action<object, TEventArgs>), target, _method, true);
if (callback != null)
{
callback(sender, e);
}
}
}
}
}