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