【发布时间】:2011-08-23 10:12:38
【问题描述】:
我正在查看Control.BeginInvoke 方法,但我不太明白它所说的含义:
在控件所在的线程上异步执行委托 基础句柄创建于。
control's underlying handle 是什么?它有什么作用?
【问题讨论】:
标签: c#
我正在查看Control.BeginInvoke 方法,但我不太明白它所说的含义:
在控件所在的线程上异步执行委托 基础句柄创建于。
control's underlying handle 是什么?它有什么作用?
【问题讨论】:
标签: c#
控件具有“线程亲和性”——这意味着有一个需求,它们只被直接操作(甚至检查,除了少数特定属性,例如 InvokeRequired) 由创建它们的线程(通常称为 UI 线程)。 handle 只是 OS 控件和 .NET 控件之间的抽象。
这实际上是在 Windows 消息循环中放置一条消息,由 UI 线程(拥有控件)拾取,从而在 UI 线程上调用您的委托。这意味着它可以与控件对话。如果您当前处于后台线程(可能是异步回调或BackgroundWorker)并且需要更新 UI,这将非常有用。
【讨论】:
【讨论】:
Executes a delegate asynchronously on the thread that the control was created on.
Windows 窗体控件是在特定线程上创建的,并不是为在多线程环境中使用而设计的。 Microsoft 这样做是为了使控件只能从创建它的线程中进行操作,从而在控件上强制使用单线程环境。
控件上的 BeginInvoke 调用该线程上提供给它的代码。
【讨论】: