我有.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没有循环只是很长的数据库操作


基础教程推荐
- C#实现斐波那契数列的几种方法整理 2022-12-31
- 探索 .NET Core 依赖注入的 IServiceCollection 2023-09-27
- C#值类型、引用类型、泛型、集合、调用函数的表达式树实践 2023-05-15
- .net core Api 部署到Linux 2023-09-27
- C#中的checksum计算公式 2023-05-31
- c# 实现文件上传下载功能的实例代码 2023-03-03
- C#使用Selenium的实现代码 2023-02-08
- C# 中SharpMap的简单使用实例详解 2022-11-13
- C#实现航班预订系统 2023-06-08
- c# – 图像处理循环中的内存异常(需要比GC.collect更好的解决方案) 2023-09-20