不久前,我遇到了一种情况,我们需要向用户显示消息框以获取通知,但我们无法使用 MessageBox.Show,因为它阻塞了 GUI 线程(因此,当对话框处于活动状态时,屏幕上的任何内容都不会更新)。关于替代方案的任何建议?
[我当时编写了一个替代方案,但我不喜欢它。如果没有更好的情况出现,我会将其作为答案发布]
编辑:对话框必须浮动在主窗口的顶部;我不在乎它是否出现在任务栏中。在某些情况下,可能会同时激活多个对话框。
附录:我的解决方案是一个基本表单,它提供了 OK 和 CANCEL 按钮来发出 Completed 和 Canceled 事件;OK 为子类覆盖调用了一个虚拟 ValidateData。调用表单使用属性来避免每次重新创建表单(表单只是隐藏而不是关闭)并保留活动表单的字典以防止多次激活同一表单。这看起来像一个模态窗体,一次支持多个弹出窗体,但不占用主 GUI 线程。