我有一个gui。当我按下按钮时,我的 gui 与软件交互。这需要几秒钟。在此期间,我想要一个对话框、弹出窗口或类似的东西出现在我的 gui 前面,告诉用户等待(带有一条消息)。当 gui 与软件的交互完成时,弹出窗口会自动关闭,用户可以再次正常与 gui 交互。
有什么办法吗?
我有一个gui。当我按下按钮时,我的 gui 与软件交互。这需要几秒钟。在此期间,我想要一个对话框、弹出窗口或类似的东西出现在我的 gui 前面,告诉用户等待(带有一条消息)。当 gui 与软件的交互完成时,弹出窗口会自动关闭,用户可以再次正常与 gui 交互。
有什么办法吗?
诀窍是分离一个线程,以免占用 UI 线程。这通常是通过BackgroundWorker实现的。
有一个在 codeplex 上设置所有这些的演练。后台工作程序完成后,加载表单关闭。
下面简要介绍如何使用 BackgroundWorker 组件来完成它。
将 BackgroundWorker 放到您的 Form 上,然后在按钮的 Click 处理程序中,在当前表单上方显示您的弹出指示符 Form,并使用其 RunWorkerAsync 方法启动您的 worker。处理工人 DoWork 事件,它的处理程序运行长时间运行的任务。还要处理工作人员的完成事件(现在不确定它是如何准确调用的),并在其中隐藏您的弹出表单。您可以在 DoWork 事件 eventargs(Result 属性)中跟踪操作结果,还可以使用已完成事件 eventarg 的 Error peroperty 捕获长时间运行的任务期间的任何异常。操作进度可以在 DoWork 处理程序中通过 worker 的 ReportProgress 方法进行报告,并且可以在 GUI 中通过 worker 的相应事件进行捕获。
您还可以将鼠标光标设置为在长时间运行之前等待
this.Cursor = Cursors.WaitCursor;
然后恢复正常,然后就完成了
this.Cursor = Cursors.Default;