为什么要使用InvokeRequired

时间:2011-09-01 12:11:42

标签: .net invoke invokerequired

我理解需要使用Invoke / BeginInvoke从工作线程调用函数或过程来调用属于UI线程的组件...

我的问题是 - 有没有理由去检查InvokeRequired?假设可以在不同情况下从工作线程或UI线程调用事件处理程序。让UI线程调用Invoke对它本身最终会执行的方法有什么影响吗?

说...

Private Sub SomeProcedure() Handles event1, event2, event3
  Me.Invoke(New delegateSomeProc(Address of SomeProc))
EndSub

现在,假设事件1从UI线程触发,但事件2和/或3从其他线程触发......对于事件1调用调用是否有任何危险,即使它没有必要?它只是有点低效吗?

2 个答案:

答案 0 :(得分:2)

  

让UI线程调用Invoke对它本身最终会执行的方法有什么影响吗?

不,除了可能的性能之外没有任何后果,如果不需要调用,直接方法调用将比通过Invoke基础结构更快。

答案 1 :(得分:2)

  

让UI线程调用Invoke对它本身最终会执行的方法有什么影响吗?

我所知道的唯一区别是,如果在创建控件的句柄之前调用,则使用Invoke将失败。

article更详细地讨论了这些问题。