我有一个gui。当我按下按钮时,我的gui会与软件进行交互。这需要几秒钟。在这段时间内,我想要一个对话框,弹出或类似的东西出现在我的gui的前面,它告诉用户等待(带有消息)。当gui与软件的交互完成后,弹出窗口自动关闭,用户可以再次与gui进行正常交互。桂忙啪啪
有没有办法做到这一点?
我有一个gui。当我按下按钮时,我的gui会与软件进行交互。这需要几秒钟。在这段时间内,我想要一个对话框,弹出或类似的东西出现在我的gui的前面,它告诉用户等待(带有消息)。当gui与软件的交互完成后,弹出窗口自动关闭,用户可以再次与gui进行正常交互。桂忙啪啪
有没有办法做到这一点?
诀窍是分离一个线程,以避免捆绑UI线程。这通常通过BackgroundWorker来实现。
有一个walkthrough用于在codeplex上设置所有这些。加载表单在背景工作完成时关闭。
您还可以设置鼠标光标移动到前等待长时间运行的操作
this.Cursor = Cursors.WaitCursor;
,比恢复正常,那么它的完成
this.Cursor = Cursors.Default;
下面是简要它如何能够使用BackgroundWorker完成零件。
将BackgroundWorker放到窗体上,然后在按钮的Click处理程序中,在当前窗体上方显示弹出窗口指示符窗体,并使用RunWorkerAsync方法启动您的工作程序。处理工人DoWork事件,并处理它,运行长时间运行的任务。还要处理工作人员完成的事件(现在不确定它是如何被调用的),并且隐藏了弹出窗体。您可以跟踪DoWork事件eventargs(Result属性)中的操作结果,还可以在完成的事件eventarg的Error peroperty的长时间运行任务期间捕获任何异常。操作进度可以通过工作人员的ReportProgress方法在DoWork处理程序中报告,并且可以通过工作人员的相应事件在GUI中捕获操作进度。
当我按下按钮时,我开始串行通信。应用程序与软件的互动现在正在另一个线程上进行(除了主GUI线程)。您提出的解决方案是否会在这种情况下工作 – user1903439 2013-02-21 17:25:11
我经常使用串行通信,并且始终在后台线程上执行此操作,因此在大多数情况下,我的答案是肯定的。 – 2013-02-21 17:28:41