WinForms:寻找一种简单的方法来弹出“正在处理..”面板

Posted

技术标签:

【中文标题】WinForms:寻找一种简单的方法来弹出“正在处理..”面板【英文标题】:WinForms: Looking for an easy way to pop up a 'Processing..' panel 【发布时间】:2011-10-23 07:04:18 【问题描述】:

我有一个 WinForms 应用程序,它在某些时候会进行一些需要几秒钟的计算。在此期间,我禁用了控件。此外,我想显示一个更明显地“阻止”应用程序的弹出窗口。

为了这样做,我尝试在表单顶部放置一个面板,但我无法在其中添加任何文本。 IE。我放在那里的标签和图像框不知何故没有显示或在面板后面。

有什么建议可以让我快速轻松地实现这一目标吗? .. 我的意思是,无需重新设计整个表单。

【问题讨论】:

但是这样他会阻塞等待用户点击的进程并且他的计算不会被执行...... 【参考方案1】:

您的附加面板中没有显示的问题是所有事情都发生在同一个线程中,但是您的计算阻止了所有事情的出现,因为它们占用了线程。您应该考虑使用 backgroundWorker,它是 WinForms 中的工具之一。您应该将执行计算的函数调用扔到 backgroundWorker 的 DoWork 方法中,然后表单本身可以在计算期间继续运行。

有关示例,请参阅 http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx

【讨论】:

【参考方案2】:

创建一个对话框(windows 窗体)以在处理过程中弹出,然后您可以在处理完成后关闭对话框。

通过使用对话框而不是消息框,您仍然可以控制在处理完成后关闭窗口。

【讨论】:

【参考方案3】:

您可以创建一个简单的用户控件,其中只包含一个标签和一个 ImageBox,也可以使用公共设置器来设置它们的值。您可以将其添加到表单中,将其 Visible 属性设置为 false。然后您可以在计算过程中使其可见,最后返回顶部不可见。

【讨论】:

以上是关于WinForms:寻找一种简单的方法来弹出“正在处理..”面板的主要内容,如果未能解决你的问题,请参考以下文章

javaScript 弹出一个窗体

如何使用事务回栈来弹出片段?

有没有一种简单的方法可以在 WinForms 中实现 Checked Combobox [重复]

Linux eject 命令

ContextMenu使用实例

在 WinForms 中将 Listbox 绑定到 List<object>