gpt4 book ai didi

c# - BackgroundWorker ReportProgress 没有循环只是长时间的数据库操作

转载 作者:太空狗 更新时间:2023-10-30 00:31:45 27 4
gpt4 key购买 nike

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

我想使用 BackgroundWorker 和 ReportProgress,这样用户就会知道发生了什么事情。我制作了一些使用它的应用程序,但当 BackgroundWorker 工作时,它们都处于某种循环中,我可以轻松地在每个循环步骤中报告进度。

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

  1. worker 异步启动
  2. 从 DB2 中获取数据到数据表中(这花费的时间最多)
  3. 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 没有循环只是长时间的数据库操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23110206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com