这有什么区别:
richTextBox1.Invoke((MethodInvoker)(() => richTextBox1.Clear()));
还有这个:
Invoke((MethodInvoker)(() => richTextBox1.Clear()));
?
第一个更好吗?
最佳答案
第二个正在调用 Invoke
关于隐式 this
引用,大概用于 Form
中的代码或 UserControl
.
鉴于此,两者都使用了 Control.Invoke
的继承版本方法。这意味着问题简单地变成了:
What's the difference between calling
Invoke
on different Controls?
如果控件绑定(bind)到同一个 UI 线程,则没有。
如果它们绑定(bind)到不同的 UI 线程,那么您调用的方法将在完全不同的消息循环中运行,并由完全不同的线程处理。如果您从委托(delegate)体内的不同 UI 线程访问控件,您将遇到异常(或更糟的是,意外行为)。
拥有多个 UI 线程是一件非常糟糕的事情。如果可以避免,请不要使用它们。假设您接受该建议,这意味着谁控制您并不重要Invoke
(只要您不调用 null
控件)。
关于c# - MethodInvoker 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18364004/