Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / WeakEventHandler.cs
1 using System;
2 using System.Reflection;
3
4 namespace Tizen.NUI
5 {
6     internal sealed class WeakEventHandler<TEventArgs> where TEventArgs : EventArgs
7     {
8         private readonly WeakReference _targetReference;
9         private readonly MethodInfo _method;
10
11         public WeakEventHandler(EventHandler<TEventArgs> callback)
12         {
13             _method = callback.GetMethodInfo();
14             _targetReference = new WeakReference(callback.Target, true);
15         }
16
17         public void Handler(object sender, TEventArgs e)
18         {
19             var target = _targetReference.Target;
20             if (target != null)
21             {
22                 var callback = (Action<object, TEventArgs>)_method.CreateDelegate(typeof(Action<object, TEventArgs>), target);
23                 if (callback != null)
24                 {
25                     callback(sender, e);
26                 }
27             }
28         }
29 }
30
31 }
32