You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.2 KiB
97 lines
2.2 KiB
5 years ago
|
#if FAT
|
||
|
|
||
|
using System;
|
||
|
using System.Reflection;
|
||
|
using LinqInternal.Core;
|
||
|
|
||
|
namespace LinqInternal.Collections.ThreadSafe
|
||
|
{
|
||
|
[System.Diagnostics.DebuggerNonUserCode]
|
||
|
internal class WeakEvent<TEventArgs>
|
||
|
where TEventArgs : EventArgs
|
||
|
{
|
||
|
private readonly WeakDelegateCollection _eventHandlers;
|
||
|
|
||
|
public WeakEvent()
|
||
|
{
|
||
|
_eventHandlers = new WeakDelegateCollection(true, true);
|
||
|
}
|
||
|
|
||
|
public WeakEvent(bool reentryGuard)
|
||
|
{
|
||
|
_eventHandlers = new WeakDelegateCollection(true, reentryGuard);
|
||
|
}
|
||
|
|
||
|
public int Count
|
||
|
{
|
||
|
get { return _eventHandlers.Count; }
|
||
|
}
|
||
|
|
||
|
protected WeakDelegateCollection EventHandlers
|
||
|
{
|
||
|
get { return _eventHandlers; }
|
||
|
}
|
||
|
|
||
|
public void Add(EventHandler<TEventArgs> value)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
_eventHandlers.Add(value);
|
||
|
}
|
||
|
catch (NullReferenceException)
|
||
|
{
|
||
|
//Empty
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Add(MethodInfo method, object target)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
Delegate value = method.CreateDelegate(typeof(EventHandler<TEventArgs>), target);
|
||
|
_eventHandlers.Add(value);
|
||
|
}
|
||
|
catch (NullReferenceException)
|
||
|
{
|
||
|
//Empty
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Clear()
|
||
|
{
|
||
|
_eventHandlers.Clear();
|
||
|
}
|
||
|
|
||
|
public virtual void Invoke(object sender, TEventArgs eventArgs)
|
||
|
{
|
||
|
_eventHandlers.Invoke(sender, eventArgs);
|
||
|
}
|
||
|
|
||
|
public void Remove(EventHandler<TEventArgs> value)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
_eventHandlers.Remove(value);
|
||
|
}
|
||
|
catch (NullReferenceException)
|
||
|
{
|
||
|
//Empty
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Remove(MethodInfo method, object target)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
Delegate value = method.CreateDelegate(typeof(EventHandler<TEventArgs>), target);
|
||
|
_eventHandlers.Remove(value);
|
||
|
}
|
||
|
catch (NullReferenceException)
|
||
|
{
|
||
|
//Empty
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|