C# WinForm BackgroundWorker 不更新进度栏

2024-02-18

我在让后台工作人员更新进度条时遇到了一些麻烦。我使用在线教程作为示例,但我的代码无法正常工作。我在这个网站上进行了一些挖掘,但找不到任何解决方案。我对后台工作者/进度的事情很陌生。所以我不完全理解它。

只是为了设置: 我有一个主窗体(窗体 1),它打开另一个带有进度条和状态标签的窗体(窗体 3)。

我的 Form 3 代码如下:

public string Message
{
    set { lblMessage.Text = value; }
}

public int ProgressValue
{
    set { progressBar1.Value = value; }
}
public Form3()
{
    InitializeComponent();
}

我的 Form 1 部分代码:

private void btnImport_Click(object sender, EventArgs e)
{
    if (backgroundWorker1.IsBusy != true)
    {
        if (MessageBox.Show("Are you sure you want to import " + cbTableNames.SelectedValue.ToString().TrimEnd('$') + " into " + _db, "Confirm to Import", MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            alert = new Form3(); //Created at beginning
            alert.Show();
            backgroundWorker1.RunWorkerAsync();
        }
    }
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;
    int count = 0
    foreach(DataRow row in DatatableData.Rows)
    {
    /*... Do Stuff ... */
    count++;
    double formula = count / _totalRecords;
    int percent = Convert.ToInt32(Math.Floor(formula)) * 10;
    worker.ReportProgress(percent, string.Format("Completed record {0} out of " + _totalRecords, count));
    }
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    alert.Message = (String) e.UserState;
    alert.ProgressValue = e.ProgressPercentage;
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    alert.Close();
}

所以。问题是它没有更新任何东西。进度条和标签都在更新。有人可以指出我的写作方向或有建议吗?


那会给你0 * 10因为count and _totalRecords是整数值,这里使用整数除法。因此count小于总记录数,您有formula等于0:

double formula = count / _totalRecords; // equal to 0
int percent = Convert.ToInt32(Math.Floor(formula)) * 10; // equal to 0

好吧,当所有工作完成后,你将拥有formula等于1。但这就是进步没有改变的原因。

这是正确的百分比计算:

int percent = count * 100 / _totalRecords;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# WinForm BackgroundWorker 不更新进度栏 的相关文章

随机推荐

  • 更改 CakePHP 中的管理布局

    我在 cakephp 工作 我的 app config routes php 文件中有以下两行 and setup admin routing Router connect admin controller action array act
  • 为什么 sql.Open() 不应该返回 nil 作为错误?

    我正在尝试连接到 mysql 数据库 我尝试查看如果我提供了错误的连接信息是否会收到错误 但它仍然返回nil作为错误 即使我完全关闭 mysql 它仍然不会返回错误 如果此函数不返回错误 那么在该函数之后检查错误有何意义 这是在 Windo
  • iPhone 6 设备和模拟器上的快照方法被破坏

    由于某种未知的原因 iPhone 6 模拟器 和设备 上的所有屏幕截图方法似乎都可能存在错误 每当我调用任何屏幕截图方法时 包括 屏幕更新后的快照视图 可调整大小的SnapshotViewFromRect 绘制ViewHierarchyIn
  • 将表单输入值作为路径附加到操作 url

    我有一个这样的表格
  • 如何录制屏幕并保存为gif动画? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有这样的软件吗 尝试这个名为 Cropper 的免费工具 无限帧 将输出设置为动画 Gif http cropper codeplex com htt
  • iOS 动画在 iOS7 中的我的应用程序中停止工作

    我发现我的应用程序中的所有 ios 动画都停止工作 这种情况在 iOS7 中非常频繁地发生 我有一个支持 iOS 5 6 和 7 的应用程序 最近我发现所有 iOS 动画在 iOS7 中的应用程序中都停止工作 在 IOS 7 中 当在后台线
  • EditTextPreference 禁用按钮?

    我想要一个 EditTextPreference 如果 EditText 字段中没有文本 它将禁用 确定 按钮 我创建了一个自定义 EditTextPreference 类 并且能够获取 EditText 对象并设置 TextWatcher
  • Nginx 不接受字节范围

    我正在使用 nginx 来提供文件系统中的视频 我想启用范围请求 目前这是我的文件返回的结果 curl I fileurl HTTP 1 1 200 OK Server nginx Date Sat 29 Mar 2014 06 41 41
  • 使用Ansible、Jenkins和docker构建快速测试环境

    我计划使用ansible jenkins和docker一起构建测试环境 计划是这样的 为您在环境中使用的每个工具创建 ansible 剧本并将其存储在 git 上 使用 jenkins create job 在开发服务器上创建 docker
  • 如何使用 EF 在 MVC Code-first 中更新/创建多对多关系数据?

    我仔细研究了 StackOverflow Google 和 asp net 试图找到一个清晰 基本的示例来说明如何做到这一点 所有的例子都是抽象的或涉及不适用的复杂情况 我没能从他们身上获得太多有用的东西 到目前为止 他们都没有完全回答我的
  • Spring RestTemplate 将响应流式传输到另一个请求中

    我正在尝试使用 spring 将文件下载的结果直接流式传输到另一篇文章中RestTemplate 我目前的方法如下 ResponseEntity
  • 为express.js更新Cookie会话

    我正在使用cookie会话 https github com expressjs cookie sessionExpress js 处理会话的模块 我希望在每次页面加载 或ajax调用 时更新会话 这就是他们通常在任何地方工作的方式 文档对
  • Python + Selenium:从“ng-bind”获取跨度值

    所以我有 Selenium 代码可以使用 chrome 访问页面 现在在该页面上有这样的 HTML span Heloooo span 如何使用 python 和 Selenium 获取值 所以只有Heloooo 谢谢 您可以使用以下 CS
  • $.proxy() 和 bind() 有什么区别?

    2009 年 ECMAScript 5 添加了一个内置的bind 函数接受一个对象作为参数并返回一个相同的函数 其中this将始终引用您传递给它的对象 我找不到任何看起来像规范文档链接的内容 这与jQuery 的 proxy 功能 http
  • 处理 Yesod 表单中的数据集合

    是否有可能在Yesod https en wikipedia org wiki Yesod web framework 处理包含数据集合的表单 我有一个用户可以添加多个人的表单 在前端它目前看起来像这样 people map person
  • 使用 AFNetworking 下载大文件

    我正在尝试实现大文件的下载并向用户显示当前进度 但阻止 AFURLConnectionOperation setDownloadProgressBlock 返回不正确bytesRead and totalBytesRead值 它们小于应有的
  • Hyperledger Fabric 的性能测试

    在尝试使用 Hyperledger Fabric 实现 IBM 团队在其文章中报告的性能期间Hyperledger Fabric 用于许可区块链的分布式操作系统 https arxiv org abs 1801 10228 我遇到了一些问题
  • 寻找跨平台开发的最佳 PCL 配置文件

    我正在努力扩展我的应用程序支持的平台数量 它曾经支持 NET4 Windows Store Windows Phone 但我希望也涵盖适用于 Android 和 iOS 的 Mono 我已将所有业务逻辑 模型和视图模型放入可移植类库 PCL
  • Blazor GetAsync 请求返回 401 状态代码

    我是 blazor 新手 尝试使用 NET Core EF Core 3 和 Visual studio 2019 创建一个应用程序 我已经设置了一个数据库模型和一个 API 用于获取所有地址 api Address 并在浏览器中浏览到此地
  • C# WinForm BackgroundWorker 不更新进度栏

    我在让后台工作人员更新进度条时遇到了一些麻烦 我使用在线教程作为示例 但我的代码无法正常工作 我在这个网站上进行了一些挖掘 但找不到任何解决方案 我对后台工作者 进度的事情很陌生 所以我不完全理解它 只是为了设置 我有一个主窗体 窗体 1