繁体   English   中英

Control.invoke和父控件

[英]Control.invoke and parent control

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

somelabel.Invoke(...);

但是我也可以通过以下形式访问标签

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

这两个片段在性能或其他技术方面有什么区别吗?

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

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

不是真的......重要的是这两个控件都使用相同的UI线程。 实际上你只是使用控件来计算哪个线程编组委托调用。 使用您实际使用的控件通常更清晰,但结果将是相同的。

请注意,如果您使用两个不同的UI线程有两个不同的窗口(例如,使用一个UI线程显示的启动屏幕,而另一个忙于构建主UI),它确实会有所不同。 只有少数情况下你需要多个UI线程,但黄金法则是一个窗口中的所有控件都必须使用相同的UI线程,因此在同一个窗口中使用任何UI对象应该没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM