一段时间后我遇到了一个情况下,我们需要显示的消息-箱子的用户对于通知,但我们不能使用消息框.展示,因为它阻止GUI线(所以什么都不在屏幕上得到更新的话,该对话是有效)。任何建议的一个选择吗?

[我编写一个替代的时间,但我不喜欢它。我会后,它作为一个答案如果没有更好的出现,虽然]

编辑:该对话必须浮在顶的主要窗口;我不在乎如果它出现在任务栏或没有。多于一个对话可以在一旦在某些情况。

增编:我的解决方案是一个基本形式,这提供了确定和取消按钮发完成和取消的事件;确定一个称为虚拟ValidateData子替代。叫形式使用性质,以避免重新形成的时间(的形式只是隐藏的,而不是封闭的)并且保持一词典的活动形式,以防止形式相同,从被激活的更多的一次。这看起来像一个模式的形式,支持多弹的形式在一次,但并没有占主要GUI线。

有帮助吗?

解决方案

我同意rslite和米切尔卖方。创建一个非模态的形式来显示所需要的信息是去的最佳途径。如果你有多个消息,你可能要考虑将它们放入一个列表框,并且对它们的用户双击得到完整的信息需要被显示出来。

其他提示

我建议要有一个非模式的办法,同其他人一样说,但更具体一点:

  • 如果你只想要一个通知,可能试着一个气球尖端(技术需要评估或者你自己的),或者一个窗口,就像是Outlook邮件通知或通知的许多即时信息等翠莲显示。
  • 如果你只是想让用户有机会采取行动,使用一个非模式形式,但记得他很可能只是点击它。
  • 如果用户必须采取行动,在你的消息,你应该去的模式。注意到主窗口仍将画你可以刷新你的GUI的一个模式对话,毕竟,有一个消息泵,否则它不会的工作。我没有的东西那样的最近,我们有一个背景工作人员的线的游泳池即将进行的任何行动和火灾事件的图形用户界面,以刷新,以及一个模式等待对话,仍然得到了它消息泵。所有者窗口没有更新的背景中行动,如预期的那样。

什么有关添加 NotifyIcon的您的应用程序和显示气球提示。不利的一面是,该通知将在很短的时间后消失,但也许这就是最适合你的用户,如果他们不需要采取行动。

我将通过使用根据特定的要求的非模态对话框或者一些工具提示解决这个问题。

如果你不希望它阻止你,我只希望创建自己的简单的形式做展示。这是多么我已经完成了为客户的项目需要一个无阻塞的解决方案时之前。但是请记住,如果你这样做非阻塞用户可以得到数倍起来,不堪重负,如果他们真的是“你必须采取行动”类型的项目。

感谢大家谁贡献的建议,看来我的解决办法是有关的权利; - )

我的解决方案是,提供确定和取消按钮来发射已完成,取消事件碱形式; OK称为虚拟是validateData的子类覆盖。使用的属性,以避免每次重新创建的形式调用形式(形式只是隐藏,而不是关闭的)并保持的活性形式的字典,以防止相同的形式被激活一次以上。这看起来像一个模态的形式,支持一次多个弹出形式,但不占用主界面线程。

如果你想在MessageBox的外观和感觉只是显示它在后台线程。

ThreadPool.QueueUserWorkItem( (state) =>
    {
         MessageBox.Show("Your message");
    });

(代码未测试)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top