使用InvokeRequired vs control.InvokeRequired

InvokeRequiredsomecontrol.InvokeRequired什么区别?

像这样,

 delegate void valueDelegate(string value); private void SetValue(string value) { if (InvokeRequired) { BeginInvoke(new valueDelegate(SetValue),value); } else { someControl.Text = value; } } 

 delegate void valueDelegate(string value); private void SetValue(string value) { if (someControl.InvokeRequired) { someControl.Invoke(new valueDelegate(SetValue),value); } else { someControl.Text = value; } } 

第一个版本检查负责控件的线程。 第二个版本检查负责someControl的线程。 (并且他们然后将控件的线程委托给哪个控件的线程。)

它们可能有所不同 – 尽管如果两个控件位于同一个顶级窗口中,它们实际上应该不同。 (一个窗口中的所有控件都应该在同一个线程上运行。)

不同之处在于您访问该属性的控制权。 如果从表单上的方法中访问InvokeRequired,则可以有效地访问表单的InvokeRequired属性。

如果在同一个线程中创建了form和someControl,那么它们将返回相同的值。

看起来你在第一个例子中是在一个控件的范围内,而在第二个例子中你不是。 主要forms是一个控件,就像任何其他控件一样。 如果someControl添加到主控件的Control集合中,则可以使用其中一个。