我有.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# websocket及时通信协议的实现方法示例 2022-11-24
- c# – .NET Windows窗体DataGridView以编程方式添加时,单元格文本消失 2023-09-20
- C#中隐藏TabControl选项卡标签的解决方案 2023-07-19
- Unity多屏幕设置的具体方案 2023-06-05
- .NET Core 使用Topshelf方式创建Windows服务 2023-09-27
- 改进c# 代码的五个技巧(二) 2023-03-28
- C#如何通过probing指定dll寻找文件夹详解 2023-01-06
- c#滚动字幕动画窗体制作步骤 2023-01-16
- C#实现Array,List,Dictionary相互转换 2023-06-04
- C# ADO.NET 离线查询的实现示例 2023-02-17