c# - MethodInvoker 的区别?

标签 c# winforms

这有什么区别:

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/

相关文章:

c# - 在 C# 中高效查找二维数组 T[][] 中的唯一元素

c# - 根元素必须与引用该文件的部分的名称相匹配

C# 强制 PropertyGrid 不扩展子类属性并在根级别显示它

c# - win窗体中的数据表

winforms - 为什么这个 WinForms 窗口在拖动时呈现伪像?

c# - 是否可以在 MVC3 (C#) 中为 `[Display(Name="Something")]` 数据注释使用变量

c# - 我们应该按什么顺序实现Asp.Net Mvc App

c# - 使用 Azure B2C 和 .NET Core 进行注销重定向

c# - 如何将多个字符串值传递给 C# 中的按钮单击事件处理程序

c# - 使用 Properties.Default.Settings 时,应用程序会在 namespace 中创建 "_"的文件夹