MethodInvoker difference?
本文关键字:difference MethodInvoker | 更新日期: 2023-09-27 18:28:34
这两者之间有什么区别:
richTextBox1.Invoke((MethodInvoker)(() => richTextBox1.Clear()));
这个:
Invoke((MethodInvoker)(() => richTextBox1.Clear()));
第一个更好吗?
第二个是在隐式this
引用上调用Invoke
,可能是针对Form
或UserControl
内部的代码。
鉴于此,两者都使用了Control.Invoke
方法的继承版本。这意味着问题简单地变成了:
在不同的控件上调用
Invoke
有什么区别?
如果控件绑定到同一个UI线程,则不执行任何操作。
如果它们绑定到不同的UI线程,则调用该方法以在由完全不同的线程处理的完全不同的消息循环中运行。如果您从代理主体中的另一个UI线程访问控件,则会出现异常(或者更糟的是,出现意外行为)。
多个UI线程是一件非常糟糕的事情。如果你可以避免的话,就不要使用它们。假设你接受了这个建议,这意味着你Invoke
的哪个控件无关紧要(只要你不调用null
控件)。
在第二种情况下,invoke方法是在表单上调用的。。。换句话说,就是这样。调用()。
这是从Control类继承的。只要它们都在UI线程上,两者都应该工作。