. net模态vs非模态,在线程方面的实现

本文关键字:模态 方面 实现 线程 vs net | 更新日期: 2023-09-27 18:07:28

我在哪里可以找到有关Show()与ShowDialog()的模态与非模态实现的详细信息。到目前为止,我一直认为调用非模态实现会创建一个单独的线程,但我找不到任何来源来支持或削弱它。

. net模态vs非模态,在线程方面的实现

ShowShowDialog永远不会创建新线程。您可能已经意识到,所有UI元素都托管在一个且只有一个线程上。通常这个线程被称为Application.Run。UI表单和控件需要消息循环才能正确操作。Application.Run是创建此消息循环的机制之一(也是最常见的)。

模态对话框的有趣之处在于ShowDialog将为对话框创建自己的消息循环。这就是为什么即使从主UI线程以外的线程调用1时,它通常也会工作。

所以回答你的问题:两者都不会创建一个新的线程,但ShowDialog将创建自己的消息循环。


1 我在这里松散地使用"工作"一词。是的,它将正确显示,响应大多数用户操作,等等。但是,不建议您这样做,因为它可能会在其他地方引起问题,甚至可能表现得很奇怪。