在哪里可以找到有关Show()vs ShowDialog()的模态vs无模式实现的详细信息。到目前为止,我一直认为调用无模式实现会创建一个单独的线程,但我找不到任何来源支持它或使其变得虚弱。
答案 0 :(得分:2)
Show
和ShowDialog
永远不会创建新主题。您可能知道,所有UI元素都托管在一个且只有一个线程上。通常这个线程是调用Application.Run
的线程。 UI表单和控件需要消息循环才能正常运行。 Application.Run
是创建此消息循环的机制之一(也是最常见的)。
模态对话框的有趣之处在于ShowDialog
将为对话框创建自己的消息循环。这就是为什么即使从主UI线程以外的线程调用它也通常会工作 1 。
所以回答你的问题:既不会创建新线程,但ShowDialog
会创建自己的消息循环。
1 我在这里松散地使用术语“工作”。是的,它将正确显示,响应大多数用户操作等。但是,不建议您这样做,因为它可能在其他地方引起问题,甚至可能表现得很奇怪。请参阅上述规则,所有UI元素都应由单个线程托管。