c# - Control.invoke 和父控件

标签 c# .net winforms

假设我有一个名为 MainForm 的表单和一个控件:somelabel。为了从另一个线程访问这些控件,我必须使用 Invoke 方法。例如:

somelabel.Invoke(...);

但是我也可以通过这样的形式访问标签:

MainForm.Invoke(...) //Code for manipulating somelabel

这两个代码段在性能或其他技术方面有什么不同吗?

最佳答案

没有。每个 Windows 窗体控件都公开一个 Invoke 方法,并且它们都以相同的方式运行。无论您使用哪个控件(无论是窗体还是子控件),您仍然会执行相同的基本操作,因此性能将是相同的。

我个人更喜欢使用表单而不是单独的控件。这使得以后重新设计更容易,因为您可以删除或添加控件而不会破坏通过表单调用的代码。另一个不错的选择是使用 WindowsFormsSynchronizationContext ,您可以通过 SynchronizationContext.Current 检索.这为您提供了一种生成同步上下文的方法,您可以使用(通过发送/发布而不是调用)执行相同的操作,但不绑定(bind)到任何控件。

关于c# - Control.invoke 和父控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2149789/

相关文章:

c# - 返回任务的接口(interface)的长时间运行同步实现

c# - 获取音频设备列表并使用 C# 选择一个

.net - 控制 dotnet pack 项目引用的版本约束

c# - 如何在 Winforms TextBox 中每次按键后获取当前文本?

c# - 函数导入(存储过程)是否需要 SaveChanges()?

c# - Unity 3D 将对象设置为圆锥体

c# - 为什么C#中事件的实现默认不使用弱事件模式?

c# - 如何设置 LUISDialog 转到 .NET 中的“无意图”的最小阈值?

c# - 为数据 GridView 中的特定单元格添加下拉列表

c# - Web 浏览器控件 - 检测何时调用 js window.close