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
#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 |