我正在研究Control.BeginInvoke
方法,当它说:
在控件的线程上异步执行委托 底层句柄是在。上创建的。
什么是control's underlying handle
?它做了什么?
答案 0 :(得分:6)
控件具有“线程关联性” - 意味着有一个需求它们只是直接操纵(甚至检查,除了一些创建它们的线程(通常称为UI线程)的特定属性,如InvokeRequired
)。 句柄只是OS控件和.NET控件之间的抽象。
这实际上做的是在Windows消息循环上放置一条消息,由UI线程(拥有该控件)获取,从而导致在UI线程上调用您的委托。这意味着它可以与控件通信。如果您当前处于后台线程(可能是异步回调或BackgroundWorker
),并且需要更新UI,则此功能非常有用。
答案 1 :(得分:1)
答案 2 :(得分:1)
Windows窗体控件是在特定线程上创建的,并非设计用于多线程环境。 Microsoft制作它使控件只能从它创建的线程中进行操作,从而强制控件上的单线程环境。
控件上的BeginInvoke调用在该线程上提供给它的代码。