【发布时间】:2010-08-12 12:04:41
【问题描述】:
我们的一些非技术用户遇到的问题是,我们的应用程序中的对话框 MessageBox 有时会显示在主窗体后面,并且应用程序不接受任何输入,直到消息框(他们看不到)被关闭。
应用程序是用 C# 编写的,消息框是标准的,例如代码可以像 MessageBox.Show(message, caption) 一样简单,消息框可以由主 UI 线程(即不是一些后台线程)创建。应用程序不必全屏运行,但我们 90% 的用户确实会全屏运行。
大多数时候((可能 > 99%)消息框正确显示,我从来没有设法看到它是如何出错的,但我看到一台机器出错了。
我注意到的一件事是,如果您有一个显示对话框的应用程序,那么当您查看任务管理器时,您通常只会在应用程序列表中看到一个条目。每当消息框被隐藏时,您都会看到两个条目,一个用于主应用程序,另一个用于此消息框。
一旦您知道发生了什么,就很容易解决问题,但是我们的一些非技术用户对此感到困惑并最终关闭了他们的计算机。 (如果这不能解决问题,使用远程桌面的人会更加困惑)。
我不认为它与操作系统有关,因为我在 Vista 中看到过这种情况,并且被告知它也发生在 Windows 2003 服务器上的终端会话中。
有没有人知道为什么会发生这种情况,更重要的是是否可以采取任何措施来避免这种情况?
【问题讨论】:
-
我在使用 WPF 时遇到了同样的问题。有些东西可以触发对话框和主窗口之间的关系,即使没有指定,这种关系通常存在,也会被破坏。提供一个 Window 作为第一个参数解决了这个问题。为了重新创建它,我在 VS 调试器中运行了应用程序。处于活动状态的调试器似乎经常破坏这种关系。您可以判断问题已经发生,因为该对话框将在任务栏上获得自己的条目。
标签: c# winforms messagebox