一个简单的问题,但办公室里似乎没有人知道,我也找不到一个好的方法来问谷歌。在winforms中,如果你有一个处理事件的函数(在这种情况下,是关于焦点失去事件的),那么这个函数会在与触发事件的线程相同的线程上运行吗?
所以,如果我有一个具有焦点的文本框,它当前正在UI线程上运行,并且我改变了焦点,那么UI线程将运行我的函数吗?
是的,UI线程将执行UI事件处理程序。
一般来说,在Windows编程中,不应该在其他线程上触碰UI组件。Windows Forms是设计为通过单个线程工作的。如果您需要执行较重的任务,否则可能会冻结UI线程,您可以生成一个新线程来完成工作,然后将更改推送到UI线程。
您可以使用SynchronizationContext.Current 将工作发布到UI线程。 BackgroundWorker 也很方便。
我相信这是正确的。通常事件都在GUI线程上处理。以下是一个链接,介绍如何在不同的线程中处理事件。
http://bytes.com/topic/c-sharp/answers/526484-handling-control-ui-events-worker-threads