-2

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

4

1 回答 1

2

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

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

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


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

于 2013-04-05T02:47:39.050 回答