异步调用 - 是否需要EndInvoke?

Wil*_*art 6 c# multithreading delegates begininvoke

可能重复:
每个BeginInvoke必须跟一个EndInvoke吗?
EndInvoke()是可选的,sort-of optional,还是绝对不是可选的?

我有一个多线程应用程序,其中一个辅助线程需要每隔几分钟就在主线程上执行一些代码.没有任何返回值,第二个线程不关心它是否引发任何异常或无法运行.

到目前为止,我已经得到它来运行代码Form.Invoke,但它有时需要比平时(几秒钟)更长的时间并阻塞线程直到它完成.我需要第二个线程能够继续执行而不会停顿几秒钟.

BeginInvoke听起来它很好地完成了工作,但我真的没有任何地方可以打电话EndInvoke,因为我不想等待它或获得返回值.考虑到被调用的代码涉及一堆本机调用,我不确定它是否是一个好主意EndInvoke.

我是否需要调用EndInvoke,或者是否有其他方法可以使代码在主窗体线程上异步运行而不是我应该使用?

谢谢=)

Dav*_*laš 6

如果需要,可以调用EndInvoke从委托中检索返回值,但这不是必需的.EndInvoke将阻塞,直到可以检索返回值.

资料来源:http : //msdn.microsoft.com/en-us/library/0b1bf3y3.aspx备注


Dan*_*ant 5

调用 EndInvoke 的一种典型方法是在 BeginInvoke 中包含完成回调,以便您可以在回调中调用 EndInvoke。这对于执行比 Invoke 更具体操作的 Begin/End 方法更为重要,例如 BeginRead/EndRead;在后一种情况下,可能需要 End 来进行清理,并且通常还会(重新)抛出该过程中发生的任何异常。


归档时间:

查看次数:

4611 次

最近记录:

11 年,10 月 前