.Net Modal vs Modeless,关于线程的实现

时间:2013-04-04 13:01:01

标签: c# multithreading modal-dialog

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

1 个答案:

答案 0 :(得分:2)

ShowShowDialog永远不会创建新主题。您可能知道,所有UI元素都托管在一个且只有一个线程上。通常这个线程是调用Application.Run的线程。 UI表单和控件需要消息循环才能正常运行。 Application.Run是创建此消息循环的机制之一(也是最常见的)。

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

所以回答你的问题:既不会创建新线程,但ShowDialog会创建自己的消息循环。


1 我在这里松散地使用术语“工作”。是的,它将正确显示,响应大多数用户操作等。但是,不建议您这样做,因为它可能在其他地方引起问题,甚至可能表现得很奇怪。请参阅上述规则,所有UI元素都应由单个线程托管。