4

简单的问题,虽然办公室里似乎没有人知道,我也找不到向谷歌询问这个问题的好方法。在 winforms 中,如果您有一个处理事件的函数(在这种情况下,在 focusLost 上),该函数是否与触发事件的线程发生在同一个线程上?

因此,如果我有一个当前在 UI 线程上运行的带有焦点的文本框,并且我改变了焦点,那么 UI 线程会运行我的函数吗?

4

2 回答 2

4

是的,UI 线程将执行 UI 事件处理程序。

通常,在 Windows 编程中,您不应该在其他线程上接触 UI 组件。Windows 窗体设计为通过单线程工作。如果您需要繁重的工作,否则可能会冻结 UI 线程,您可以生成一个新线程来完成工作,然后将更改推送到 UI 线程。

您可以使用SynchronizationContext.Current将工作发布到 UI 线程。BackgroundWorker也很方便。

于 2012-06-12T21:05:05.383 回答
1

我相信这是正确的。通常事件在 GUI 线程上处理。以下是有关如何在不同线程中执行此操作的链接。

http://bytes.com/topic/c-sharp/answers/526484-handling-control-ui-events-worker-threads

于 2012-06-12T21:04:27.440 回答