【问题标题】:Difficulty in understanding c# method descriptionc#方法描述难懂
【发布时间】:2011-08-23 10:12:38
【问题描述】:

我正在查看Control.BeginInvoke 方法,但我不太明白它所说的含义:

在控件所在的线程上异步执行委托 基础句柄创建于。

control's underlying handle 是什么?它有什么作用?

【问题讨论】:

标签: c#


【解决方案1】:

控件具有“线程亲和性”——这意味着有一个需求,它们只被直接操作(甚至检查,除了少数特定属性,例如 InvokeRequired) 由创建它们的线程(通常称为 UI 线程)。 handle 只是 OS 控件和 .NET 控件之间的抽象。

这实际上是在 Windows 消息循环中放置一条消息,由 UI 线程(拥有控件)拾取,从而在 UI 线程上调用您的委托。这意味着它可以与控件对话。如果您当前处于后台线程(可能是异步回调或BackgroundWorker)并且需要更新 UI,这将非常有用。

【讨论】:

    【解决方案2】:

    它表示窗口句柄 - 对控件的内部非托管引用。

    Contorl.Handle:

    获取控件绑定的窗口句柄。

    还有:

    Handle 属性的值是一个 Windows HWND。

    【讨论】:

    • 那么等于Executes a delegate asynchronously on the thread that the control was created on.
    • @LAS_VEGAS - 这是我的理解。
    【解决方案3】:

    Windows 窗体控件是在特定线程上创建的,并不是为在多线程环境中使用而设计的。 Microsoft 这样做是为了使控件只能从创建它的线程中进行操作,从而在控件上强制使用单线程环境。

    控件上的 BeginInvoke 调用该线程上提供给它的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多