WinForms事件处理程序是否在与调用者相同的线程上发生?

4

一个简单的问题,但办公室里似乎没有人知道,我也找不到一个好的方法来问谷歌。在winforms中,如果你有一个处理事件的函数(在这种情况下,是关于焦点失去事件的),那么这个函数会在与触发事件的线程相同的线程上运行吗?

所以,如果我有一个具有焦点的文本框,它当前正在UI线程上运行,并且我改变了焦点,那么UI线程将运行我的函数吗?

2个回答

4

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

一般来说,在Windows编程中,不应该在其他线程上触碰UI组件。Windows Forms是设计为通过单个线程工作的。如果您需要执行较重的任务,否则可能会冻结UI线程,您可以生成一个新线程来完成工作,然后将更改推送到UI线程。

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


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接