首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#进度条-后台工作人员进度更改上的错误

C#进度条-后台工作人员进度更改上的错误
EN

Stack Overflow用户
提问于 2017-07-03 06:01:28
回答 1查看 666关注 0票数 0

它做什么

逐行将数据视图中的值读入数据库ACTB。

要明确的是,这个完全相同的代码适用于我的另一个程序,没有问题,我不知道为什么我当前的程序每次运行后台工作人员时都会抛出错误。

我收到错误: 2500不是' value‘(progressbar.value) 'Value’必须介于最小值和最大值之间的有效值。

这是我的密码。

Do Work

代码语言:javascript
运行
复制
    int MaxSchema = 0;
    private void Transfer_Worker_DoWork(object sender, DoWorkEventArgs e)
    {
        try
        {
            using (OleDbConnection conn = new OleDbConnection(Con))
            {
                using (OleDbCommand cmd = new OleDbCommand())
                {
                    cmd.Connection = conn;
                    conn.Open();
                    MaxSchema = DGVExcel.Rows.Count;
                    for (int s = 0; s < DGVExcel.Rows.Count; s++) 
                    {
                    Transfer_Worker.ReportProgress(s);
                    }
                }
            }
        }
        catch (OleDbException ex)
        {
            MessageBox.Show("Import error: " + ex);
        }
        Transfer_Worker.ReportProgress(100);
    }

进度变更

代码语言:javascript
运行
复制
 private void Transfer_Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        pbar.Value = (e.ProgressPercentage * 100) / MaxSchema;
    }

现在,注释掉正在进行的代码,似乎会使进程按预期运行,甚至进度条的值也会得到更新。我不知道为什么,如果同一块代码在其他地方工作的话。

无论如何,我还没有修改进度条,所以它仍然应该具有默认属性。

可能是因为我汇报了我的工作进展吗?如果这是我需要改变的东西,请纠正我。首先,我假设我不允许用后台工作人员的工作方法更新UI,所以它应该抛出一个错误,但它没有。

编辑:该错误似乎是由行引起的

代码语言:javascript
运行
复制
  Transfer_Worker.ReportProgress(100);

将该值从100 (假定的最大值)更改为MaxSchema (rows.Count的实际值),进度条能够正确地确定终结点。

EN

回答 1

Stack Overflow用户

发布于 2017-07-03 06:52:34

将默认值(100)分配给TransferWorker的ReportProgress属性会导致进度条值在MaxSchema值远小于100%时膨胀超过100%。(100*100)/4 =报告值2500。

更改报表进度的值以匹配实际的行计数。在这种情况下,正确的行是:

代码语言:javascript
运行
复制
 TransferWorker.ReportProgress(MaxSchema);

关于它的第二个问题,如Peter所述,过去的工作范围要大得多:

代码语言:javascript
运行
复制
 Dealing with more rows would prevent the problem, because you're dividing by MaxSchema. With enough rows, the result of the calculation is small, and with 2700000 rows, the result is 0, well below the default maximum value.`"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44878669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档