这有什么区别:
richTextBox1.Invoke((MethodInvoker)(() => richTextBox1.Clear()));
和这个:
Invoke((MethodInvoker)(() => richTextBox1.Clear()));
?
第一个更好吗?
第二个是调用Invoke
隐式this
引用,大概是为 a Form
or内的代码UserControl
。
鉴于此,两者都使用该Control.Invoke
方法的继承版本。这意味着问题简单地变成:
调用
Invoke
不同的控件有什么区别?
如果控件绑定到同一个 UI 线程,则什么都没有。
如果它们绑定到不同的UI 线程,那么您正在调用该方法以在由完全不同的线程处理的完全不同的消息循环中运行。如果您从委托主体中的不同 UI 线程访问控件,您将收到异常(或更糟糕的是,意外行为)。
拥有多个 UI 线程是一件非常糟糕的事情。如果可以避免,请不要使用它们。假设您接受该建议,这意味着您使用哪个控件并不重要Invoke
(只要您不调用null
控件)。
在第二种情况下,调用方法是在表单上调用的......换句话说,this.Invoke()。
这是从 Control 类继承的。只要它们都在 UI 线程上,它们都应该可以工作。