[英]What is Control.IsHandleCreated needed for?
我正在检查TabControl的内置.net控件的来源,我看到它在决定是否向集合添加或插入TabPage之前引用此属性。
if (this.owner.IsHandleCreated)
{
this.owner.AddTabPage(tabPage, tabPage.GetTCITEM());
}
else
{
this.owner.Insert(this.owner.TabCount, tabPage);
}
这两个函数最终实现了相同的目标 - 它们将TabPage添加到内部“TabPages”集合的末尾......但我只是不明白为什么它应该与您使用的函数有关。
this
指的是覆盖内置Control.ControlCollection
的ControlCollection
。 owner
是使用ControlCollection
的TabControl。
TabControl的AddTabPage
方法(创建句柄时调用的方法)调用AddNativeTabPage
方法。 然后调用SendMessage
和PostMessage
(实际上是Control.Invoke
和Control.BeginInvoke
)来添加标签页。 这些方法将选项卡页面添加到UI线程,因此控件在内部遵守不应该与后台线程中的UI控件交互的规则 。
这实际上意味着如果创建了句柄, AddTabPage
可以安全地从非UI线程调用(对于UI控件来说非常不寻常!)。 不幸的是,这也意味着如果TabControl还没有句柄, AddTabPage
方法会阻塞,因为没有UI线程泵送消息,所以除非创建了句柄,否则不应该调用它。
对于好奇,这是在TabControl.ControlsCollection
类,在Add
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.