简单的问题,虽然在办公室似乎没有人知道,我找不到一个好的方式来问谷歌这个。在winforms中,如果你有一个处理事件的函数(在这种情况下,在focusLost上),该函数是否在与触发事件的线程相同的线程上发生?
因此,如果我有一个焦点文本框,当前正在UI线程上运行,并且我更改了焦点,那么UI线程是否会运行我的函数?
答案 0 :(得分:4)
是的,UI线程将执行UI事件处理程序。
通常,在Windows编程中,您不应该触及其他线程上的UI组件。 Windows窗体旨在通过单个线程工作。如果你需要繁重的工作,否则可能会冻结UI线程,你产生一个新线程来完成工作,然后将更改推送到UI线程。
您可以使用SynchronizationContext.Current将工作发布到UI线程。 BackgroundWorker对此也很方便。
答案 1 :(得分:1)
我认为这是正确的。通常,事件在GUI线程上处理。以下是如何在不同的主题中执行此操作的链接。
http://bytes.com/topic/c-sharp/answers/526484-handling-control-ui-events-worker-threads