Files
aistudio-wpf-diagram/Util.DiagramDesigner/Helpers/WeakINPCEventHandler.cs
2021-07-23 09:42:22 +08:00

38 lines
1.1 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
namespace Util.DiagramDesigner.Helpers
{
//[DebuggerNonUserCode]
public sealed class WeakINPCEventHandler
{
private readonly WeakReference _targetReference;
private readonly MethodInfo _method;
public WeakINPCEventHandler(PropertyChangedEventHandler callback)
{
_method = callback.Method;
_targetReference = new WeakReference(callback.Target, true);
}
//[DebuggerNonUserCode]
public void Handler(object sender, PropertyChangedEventArgs e)
{
var target = _targetReference.Target;
if (target != null)
{
var callback = (Action<object, PropertyChangedEventArgs>)Delegate.CreateDelegate(typeof(Action<object, PropertyChangedEventArgs>), target, _method, true);
if (callback != null)
{
callback(sender, e);
}
}
}
}
}