[我当时编写了一个替代品,但我不喜欢它。如果没有更好的出现,我会发布它作为答案]
编辑:对话框必须浮在主窗口的顶部;我不在乎它是否出现在任务栏中。在某些情况下,可能会同时激活多个对话框。
ADDENDUM:我的解决方案是一个基本表单,它提供了OK和CANCEL按钮来发出已完成和已取消的事件; OK称为子类覆盖的虚拟ValidateData。调用表单使用属性来避免每次重新创建表单(表单只是隐藏而不是关闭)并保留活动表单的字典以防止同一表单被激活多次。这看起来像一个模态形式,一次支持多个弹出窗体,但不会占用主GUI线程。
答案 0 :(得分:4)
我同意rslite和Mitchel Sellers。创建非模态表单以显示所需信息是最佳途径。如果您有多条消息,您可能需要考虑将它们放入ListBox并让用户双击它们以获取需要显示的完整信息。
答案 1 :(得分:4)
我建议采用非模态方法,就像其他人说的那样,但更具体一点:
答案 2 :(得分:2)
如何在您的应用中添加NotifyIcon并显示balloon tip。缺点是通知会在短时间后消失,但如果用户不需要采取行动,这可能是最好的。
答案 3 :(得分:1)
我会通过使用非模态对话框或某些工具提示来解决这个问题,具体取决于具体要求。
答案 4 :(得分:1)
如果您不想阻止它,我只需创建您自己的简单表单来进行显示。这就是我在需要非阻塞解决方案之前为客户完成项目的方法。但请记住,如果你以非阻塞方式进行操作,那么如果用户真的是“你必须采取行动”类型的项目,那么用户可能会倍增并被淹没。
答案 5 :(得分:1)
我的解决方案是一个基本表单,它提供OK和CANCEL按钮来发出已完成和已取消的事件; OK称为子类覆盖的虚拟ValidateData。调用表单使用属性来避免每次重新创建表单(表单只是隐藏而不是关闭)并保留活动表单的字典以防止同一表单被激活多次。这看起来像一个模态形式,一次支持多个弹出窗体,但不会占用主GUI线程。
答案 6 :(得分:-1)
如果你想让MessageBox看起来只是在后台线程中显示它。
ThreadPool.QueueUserWorkItem( (state) =>
{
MessageBox.Show("Your message");
});
(代码未经测试)