难以理解c#方法描述
本文关键字:方法 描述 | 更新日期: 2023-09-27 18:06:20
我在看Control.BeginInvoke
方法,我不太明白它的意思,当它说:
在控件所在的线程上异步执行委托底层句柄创建于。
control's underlying handle
是什么?它是做什么的?
控件具有"线程亲和性" -这意味着有需求它们只能由创建它们的线程(通常称为UI线程)直接操作(甚至检查,除了少数特定的属性,如InvokeRequired
)。句柄只是操作系统控件和。net控件之间的抽象。
这实际上是在windows消息循环中放置一个消息,该消息由UI线程(拥有控件)拾取,导致您的委托在UI线程上被调用。这意味着它可以与控件对话。这是有用的,如果你目前在后台线程(可能是一个异步回调或BackgroundWorker
),需要更新UI。
表示窗口句柄——控件的内部非托管引用。
参见Contorl.Handle
:
获取控件绑定到的窗口句柄。
:
Handle属性的值是Windows HWND。
Windows窗体控件是在特定线程上创建的,并不是为在多线程环境中使用而设计的。微软这样做是为了使控件只能从创建它的线程中操作,从而在控件上强制使用单线程环境。
控件上的BeginInvoke调用该线程上提供给它的代码。