using System; using System.Reflection; namespace Tizen.NUI { internal sealed class WeakEventHandler where TEventArgs : EventArgs { private readonly WeakReference _targetReference; private readonly MethodInfo _method; public WeakEventHandler(EventHandler callback) { _method = callback.GetMethodInfo(); _targetReference = new WeakReference(callback.Target, true); } public void Handler(object sender, TEventArgs e) { var target = _targetReference.Target; if (target != null) { var callback = (Action)_method.CreateDelegate(typeof(Action), target); if (callback != null) { callback(sender, e); } } } } }