繁体   English   中英

什么是Control.IsHandleCreated需要?

[英]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.ControlCollectionControlCollection owner是使用ControlCollection的TabControl。

TabControl的AddTabPage方法(创建句柄时调用的方法)调用AddNativeTabPage方法。 然后调用SendMessagePostMessage (实际上是Control.InvokeControl.BeginInvoke )来添加标签页。 这些方法将选项卡页面添加到UI线程,因此控件在内部遵守不应该与后台线程中的UI控件交互的规则

这实际上意味着如果创建了句柄, AddTabPage可以安全地从非UI线程调用(对于UI控件来说非常不寻常!)。 不幸的是,这也意味着如果TabControl还没有句柄, AddTabPage方法会阻塞,因为没有UI线程泵送消息,所以除非创建了句柄,否则不应该调用它。

对于好奇,这是在TabControl.ControlsCollection类,在Add方法。

暂无
暂无

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

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