无论InvokeRequired如何,调用Invoke有什么问题?

Mat*_*ttH 38 c# user-interface invoke event-handling invokerequired

我已经看到了交叉线程访问GUI控件的常见设置,如下所述: 将线程安全访问方法写入Windows窗体控件的最短方法

我发现的所有网络点击描述了类似的事情.

但是,为什么我们需要检查InvokeRequired?我们不能直接调用Invoke吗?

我认为答案是否定的,所以我真正的问题是'为什么'?

Mar*_*ell 30

从非UI线程我们无法触及UI - 非常糟糕的事情可能发生,因为控件具有线程亲和力.因此,从非UI线程,我们必须(在最低限度)调用InvokeBeginInvoke.

对于UI线程,但是-我们希望调用Invoke大量的时间; 问题是,如果你已经在UI线程上,它仍然有将消息发送到窗体的泵和处理它的不必要的开销.

实际上,在大多数线程代码中,您知道您希望在 UUI线程上调用特定方法,因此在这些情况下,没有额外的开销:只需调用Invoke.

  • 哦,肯定是<0.5s - 虽然你当然可以计时(比如10000次通话). (2认同)