2013-02-21 23 views
0

我有一个gui。当我按下按钮时,我的gui会与软件进行交互。这需要几秒钟。在这段时间内,我想要一个对话框,弹出或类似的东西出现在我的gui的前面,它告诉用户等待(带有消息)。当gui与软件的交互完成后,弹出窗口自动关闭,用户可以再次与gui进行正常交互。桂忙啪啪

有没有办法做到这一点?

回答

4

诀窍是分离一个线程,以避免捆绑UI线程。这通常通过BackgroundWorker来实现。

有一个walkthrough用于在codeplex上设置所有这些。加载表单在背景工作完成时关闭。

+0

当我按下按钮时,我开始串行通信。应用程序与软件的互动现在正在另一个线程上进行(除了主GUI线程)。您提出的解决方案是否会在这种情况下工作 – user1903439 2013-02-21 17:25:11

+2

我经常使用串行通信,并且始终在后台线程上执行此操作,因此在大多数情况下,我的答案是肯定的。 – 2013-02-21 17:28:41

0

您还可以设置鼠标光标移动到前等待长时间运行的操作

this.Cursor = Cursors.WaitCursor; 

,比恢复正常,那么它的完成

this.Cursor = Cursors.Default; 
1

下面是简要它如何能够使用BackgroundWorker完成零件。

将BackgroundWorker放到窗体上,然后在按钮的Click处理程序中,在当前窗体上方显示弹出窗口指示符窗体,并使用RunWorkerAsync方法启动您的工作程序。处理工人DoWork事件,并处理它,运行长时间运行的任务。还要处理工作人员完成的事件(现在不确定它是如何被调用的),并且隐藏了弹出窗体。您可以跟踪DoWork事件eventargs(Result属性)中的操作结果,还可以在完成的事件eventarg的Error peroperty的长时间运行任务期间捕获任何异常。操作进度可以通过工作人员的ReportProgress方法在DoWork处理程序中报告,并且可以通过工作人员的相应事件在GUI中捕获操作进度。