【发布时间】:2013-07-10 02:33:02
【问题描述】:
用户是否可以在 WinForms 中执行某些操作(例如单击按钮)并在 UI 线程上执行一些任意代码在在 UI 上执行该操作的事件处理程序之前线? (编辑:我不想自己这样做。我想知道它是否真的会发生。如,我需要担心吗?)
我对如何在 .NET 中为 GUI 事件调用事件处理程序有点模糊,并且我遇到了这种实现细节很重要的情况。
**编辑***
我不关心如何连接事件处理程序,甚至不关心如何以编程方式引发事件。我关心的是我已经连接的事件处理程序如何作为 UI 操作的结果被调用的幕后细节。更具体地说,我很好奇事件处理程序的调用(或导致它的事件序列)是否简单地添加到表单的消息循环中。 “直观地”显示 UI 线程可能更容易......
时间 --------->
检测到物理点击......(其他东西可以在这里点击 UI 线程)............点击事件处理程序调用
【问题讨论】:
-
你想做什么?如果这是您自己的代码,只需将其放在其他逻辑之前的事件处理程序中...
-
有几种可能的技术,并非所有技术都适用于每种情况。你的具体是非常重要的。
-
您可能想阅读
Control.WndProc()和windows procedures in general。这些是 Win32 API(Windows 窗体所基于)中所有 UI 事件处理的基础。 -
单击按钮会导致将消息发布到 UI 消息队列。该消息将由消息循环处理,但如果你有一个计时器,它可能会在那个精确的时刻发布另一条消息,就在“你的”之前,或者一个外部消息,就像其他一些应用程序抓住焦点一样发生,但这种情况很少见。逻辑通常不会突然被调用。
-
非常正确,逻辑不会突然被调用,尽管有时我在工作中看到的东西......实际上,我的问题受到应用程序中其他线程正在调用的事实的启发东西到 UI 线程