【问题标题】:UI Thread both running message pump AND executing code?UI线程既运行消息泵又执行代码?
【发布时间】:2012-04-15 08:09:36
【问题描述】:

Winforms 中的 UI 线程负责通过调用 Application.Run 来运行消息泵。消息泵是指不断从队列中拉出消息的无限循环。

所以现在我的问题是,UI 线程如何在 ex 时也执行一段代码。触发点击处理程序?应该是忙于消息泵,无法执行代码?

【问题讨论】:

    标签: c# winforms multithreading


    【解决方案1】:

    处理消息需要时间来处理消息,因为这是从消息泵同步调用的(通过点击事件)。

    这就是昂贵的代码会导致 UI 挂起的原因。

    【讨论】:

    • 那么当一个按钮被点击时,事件处理程序中的代码会作为消息发送到队列中?
    • 点击的 windows 消息由 MP 处理,WinForms 代码的内部调用点击事件,并且此事件的任何订阅者都将同步运行 - 点击处理程序就是这样的订阅者之一。
    • 啊有道理! - 但可以肯定的是,MP 处理的消息必须包含一些关于应该调用什么点击事件的信息,因为可能还有另一个按钮的点击事件?
    • 基本的 windows 消息往往只是坐标,然后将其转换为由“命中测试”操作的控件。这开始涉及我不太了解的底层 Win32 内容。对于 WinForms,您只需要知道生命在一个线程上是同步的。
    • @brumScouse 是的...但我指的是 UI 线程通常只是其中之一。我想没有什么能阻止你拥有多个不同的 UI 消息泵。
    猜你喜欢
    • 2010-11-11
    • 1970-01-01
    • 2014-03-07
    • 2016-11-18
    • 2014-02-08
    • 2010-12-31
    • 1970-01-01
    • 2023-03-27
    • 2012-10-02
    相关资源
    最近更新 更多