EndInvoke() - 可选或不可选?

tse*_*mer 5 .net delegates memory-leaks asynchronous

一个异步问题:

我一直在互联网上阅读很多文章支持和反对Delegate.EndInvoke()是可选的.这些文章大多数是4-5岁.很多死链接.

任何人都可以在.NET 2.0中解释 - EndInvoke()确实可以防止其他不可避免的内存泄漏,如果是,请指出导致此泄漏的原因是什么?

在同一主题上:如果EndInvoke()确实是必须的 - 我找到了使用运行EndInvoke()的回调方法实现Fire-and-forget机制的最佳方法.我很想听到其他人的反应.

谢谢,哦

Jon*_*eet 8

因为Delegate.EndInvoke,你应该打电话给它.对于Control.EndInvoke的WinForms的团队已经说你需要调用它.我不知道该等值WPF,但我认为这是一个好主意,这样做,除非你有一个真正好的理由来相信你不就得了.

我在线程文章中为代表提供了一些"即发即忘"的代码- 大约一半(搜索"fire").


Gui*_*ume 5

来自msdn:

始终调用EndInvoke来完成异步调用.

我建议你遵循这些指导方针,即使它今天没有泄漏,但明天可能会改变.