1
如果发现WeakEventHandler在this blog post这个WeakEventHandler的错误是什么?
但他说:
更新:是的,我知道这是坏了。还有,这意味着它不工作的错误...
,不说是什么:(错误
public class WeakEventHandler<DT, T> where T : EventArgs
{
private WeakReference weakRefToOriginalDelegate;
public WeakEventHandler(EventHandler<T> originalDelegate)
{
weakRefToOriginalDelegate = new WeakReference(originalDelegate);
}
private void DoInvoke(object sender, T args)
{
EventHandler<T> originalDelegate = (EventHandler<T>) weakRefToOriginalDelegate.Target;
if (originalDelegate != null) originalDelegate(sender, args);
}
public static implicit operator DT(WeakEventHandler<DT, T> wd)
{
object o = Delegate.CreateDelegate(typeof (DT), wd, "DoInvoke");
return (DT) o;
}
}
有人能解释什么是在这个WeakEventHandler执行错误?
我不是在寻找弱事件的实现,而是想了解上面显示的实现有什么问题。我刚刚通过C#检查了CLR,它具有与上面所示相同的弱事件处理程序实现。 Richter在他的博客中说,它不能按预期工作,所以我想知道这个实现有什么问题。 –
我看到的区别是第一个版本使用WeakReference引用委托本身,但“更正版本”使用WeakReference引用委托的目标。这是什么意思? WeakReference在引用委托时无法正确工作? –