这篇帖子说当你在委托上调用
我使用ILSpy反编译了
这是否意味着
(关于异常丢失的问题与此无关,因为整个被调用的方法被包含在try-catch块中)
在类似的问题上:有没有明确的理由解释为什么实现
编辑:可以在此处查看
BeginInvoke
方法时,始终需要调用EndInvoke
方法。另一篇帖子支持这一说法,并建议使用类BackgroundWorker
作为替代方案。我使用ILSpy反编译了
BackgroundWorker
,发现实际上,即使它在委托上使用了BeginInvoke
方法,但从未调用过EndInvoke
方法。这是否意味着
BackgroundWorkder
实现不良,或者说调用EndInvoke
并不是那么必要?(关于异常丢失的问题与此无关,因为整个被调用的方法被包含在try-catch块中)
在类似的问题上:有没有明确的理由解释为什么实现
BackgroundWorker
选择了BeginInvoke
而不是ThreadPool.QueueUserWorkItem()
?编辑:可以在此处查看
BackgroundWorker
的源代码here。
Control
的EndInvoke()
方法都是可选的。我对MSDN的参考资料感到惊讶,因为它显然与我早些时候发现的委托方案参考相矛盾(但似乎特定的参考资料至少在.NET 2.0之前就有了这个建议)。当然,如果您实际上想要接收调用的委托的返回值,调用EndInvoke()
是很重要的。 :) - Peter Duniho