请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-9-25 14:52  /   查看:3026  /  回复:1
本帖最后由 Richard.Ma 于 2020-9-25 15:50 编辑

在设计应用程序时,您需要考虑如何处理数据加载,以确保应用程序始终保持对用户的响应。通常,通过在后台线程上异步加载数据来避免主窗体的阻塞,让用户可以继续与应用程序进行交互。
问题是,如果没有适当的可视化界面,用户可能会想知道此时正在进行的后台活动过程。这需要使用进度条来指示某些活动正在后台执行。加载数据完成后,进度条会被隐藏,并显示用于显示数据的相关控件。
让我们来看一些使用WinForms和WPF中的进度条的示例。

时间不确定进度条
第一步是异步加载数据,以使应用程序UI在比正常加载时间长的时间内保持响应状态。在.NET中,使用等待的方法调用可以很轻松地处理此问题。这意味着,等待操作之后发生的任何代码只有在操作完成后才能运行。如下所示是最简单的解决方案。
  1. private async Task LoadData()
  2. {
  3.         // show progress bar
  4.         progressBar1.Visible = true;
  5.         await LoadDataAsync();
  6.         // hide progress bar
  7.         progressBar1.Visible = false;
  8. }
复制代码

您所要做的就是在等待数据加载之前设置进度条的可见性,然后在操作完成后将其设置为不可见。如果进度条是“不确定的”,这将很好地工作,这意味着它将无限期地循环遍历加载动画,直到您停止它为止。
今天,在加载数据时显示不确定的进度条或环是一种常见的设计范例。这是很流行的,因为在无法预测的网络中,我们无法确切知道可能需要多长时间。我们正在呼叫的服务器可能无法或不愿意通知我们需要多长时间。
若要在WinForms中创建不确定的进度条,请将其Style属性设置为Marquee。在WPF中,将其IsIndeterminate属性设置为True。

持续进度条
进度条不确定的缺点是用户不知道还剩下多少时间。另一种方法是在加载数据时向进度条报告进度。这种方法在安装软件中很流行,因此用户可以准确地知道还剩下多少进度(有时还需要多少时间)。根据您的数据解决方案,也可以在数据加载期间使用此功能。
让我们看一个使用后台工作程序而不是等待代码的代码示例,以便我们可以完全控制更新进度条。
  1. BackgroundWorker worker = new BackgroundWorker();

  2. public App()
  3. {
  4.     InitializeComponent();

  5.     // set background worker
  6.     worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
  7.     worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
  8.     worker.DoWork += new DoWorkEventHandler(worker_DoWork);
  9.     worker.WorkerReportsProgress = true;

  10. }
复制代码

要设置后台工作程序,我们必须侦听ProgressChanged,RunWorkerCompleted和DoWork事件。
这是我们在每种方法中所做的:
  • DoWork:执行应用程序的实际工作(例如加载数据),并在可能的情况下使用其ReportProgress方法向进度条报告进度。这将触发ProgressChanged事件。如果要加载数据,请尝试以大块形式加载它并报告两次之间的进度。
  • ProgressChanged:更新进度栏的实际值。此事件接受参数,你可以根据工作量传递可变数量。
  • RunWorkerCompleted:完成进度,例如隐藏进度栏或向用户显示消息。
要启动整个过程,只需调用RunWorkerAsync方法。
  1. // run background worker
  2. worker.RunWorkerAsync();
复制代码

要查看完整的示例,请在我们的WinForms Control Explorer中查看“ Performance” FlexGrid演示程序。


WPF中的自定义进度栏
ComponentOne为WPF提供了自定义进度栏控件。C1ProgressBar控件是根据Windows 8-10上使用的本机进度指示器建模的,以提供现代的用户体验。它可以显示为点的动画循环模式,以指示不确定的操作正在进行中。同样,C1ProgressIndicator控件显示一个加载环。
您可以使用C1ProgressBar和C1ProgressIndicator控件来显示进度条



1 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-9-28 18:17:47
沙发
有什么问题吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部