网上演练
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

#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