假设我有一个名为 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/