我有.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# – MySQL“与SQL Server建立连接时发生与网络相关或特定于实例的错误” 2023-11-22
- C# BitArray点阵列的使用 2023-07-18
- C#8.0中的索引与范围功能介绍 2023-05-16
- C# 中如何取绝对值函数 2022-11-05
- 详解.NET 6如何实现获取当前登录用户信息 2023-05-16
- 使用 C# 下载文件的多种方法小结 2023-04-27
- C#数据适配器DataAdapter 2023-06-08
- C#关于Task.Yeild()函数的讨论 2023-03-04
- C#设计模式之Template模板方法模式实现ASP.NET自定义控件 密码强度检测功能 2022-11-15
- C#使用正则表达式 2023-05-31