c# – BackgroundWorker ReportProgress没有循环只是很长的数据库操作

我有.NET 4.5 Windows Forms应用程序,其中一个方法需要一段时间才能完成(它是一个BulkCopy函数,可以加载大量数据并推送到SQL中).我想使用BackgroundWorker和ReportProgress,以便用户知道发生了什么.我做了一些使用它...

我有.NET 4.5 Windows Forms应用程序,其中一个方法需要一段时间才能完成(它是一个BulkCopy函数,可以加载大量数据并推送到SQL中).

我想使用BackgroundWorker和ReportProgress,以便用户知道发生了什么.我做了一些使用它的应用程序,但是当BackgroundWorker正在工作时它们都处于某种循环中,我可以在每个循环步骤中轻松地报告ReportProgress.

这里我有一个问题,因为没有循环,代码步骤将是:

>工人开始异步
>将数据从DB2获取到数据表中(这需要花费最多时间)
> SqlBulkCopy数据表进入SQL表

我需要在步骤1和步骤2之间开始报告进度(尽管是假进度百分比,简单的旋转进度条就足够了),并在步骤3之后结束报告进度.

任何人都有类似的问题/解决方案,我想我可以只显示一个GIF图像并在工作完成后隐藏它,但我认为这不会起作用,因为表单冻结(不响应消息).

解决方法:

您可以使用ProgressBar的Marquee样式显示活动进程的不确定长度:

BackgroundWorker bgw = new BackgroundWorker();
bgw.DoWork += bgw_DoWork;
bgw.RunWorkerCompleted += bgw_RunWorkerCompleted;
progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 50;
bgw.RunWorkerAsync();

void bgw_DoWork(object sender, DoWorkEventArgs e) {
  // long work
}

void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
  progressBar1.Style = ProgressBarStyle.Continuous;
  progressBar1.MarqueeAnimationSpeed = 0;
}

本文标题为:c# – BackgroundWorker ReportProgress没有循环只是很长的数据库操作

基础教程推荐