有没有关于它究竟有多昂贵的文件:
if (x.IsInvokeRequired) { beginInvoke . . . . }
如果你有一个90%的时间都在后台线程上(因此需要)的情况值得吗?
如果您有一个案例,其中90%的时间是在UI线程上(因此不是必需的)是否值得?
围绕这个的任何指标都会很棒.
使用分析器
我认为您需要考虑两个函数的相对成本与InvokeRequired的绝对成本.
InvokeRequired for Control基本上将当前的ThreadId与预期的ThreadId进行比较.如果你看反射器,代码会稍微复杂一点,但实际上它就是它正在做的事情.这是相当便宜的,因为它只是一些函数调用和比较.
BeginInvoke涉及获取多个锁,将委托添加到调用队列,并可能在线程之间添加元帅.相对于实际的InvokeRequired调用,此代码要昂贵得多(可能是一个数量级或2).你需要更多的调用,其中InvokeRequired返回true,然后你才会看到任何增益直接进入BeignInvoke.