【问题标题】:c# winform background worker and progress barc# winform后台worker和进度条
【发布时间】:2011-01-05 13:30:01
【问题描述】:

我正在尝试使用 BG Worker 来增加进度条。 我目前正在使用 2 名 BG 工作人员,一名用于将数据添加到数据库中,一名用于进度条。数据库上传工作正常,但进度条却不行。

代码:

BackgroundWorker bg2 = new BackgroundWorker();
bg2.DoWork +=new DoWorkEventHandler(bg2_DoWork);
bg2.RunWorkerAsync();

void bg2_DoWork(object sender, DoWorkEventArgs e)
    {

        while (bg1.IsBusy)
            DrawWellPlate.pbar.Increment(1)
    }

它所指的bg1是数据库上传线程,pbar显然是进度条。

谢谢。

【问题讨论】:

  • 你有什么异常吗?还是只是你的用户界面被冻结了?
  • 也不例外,就是没有进度吧?

标签: c# winforms progress-bar backgroundworker


【解决方案1】:

你应该这样做 其中totalProgress将显示在progressBar中,doWork不在UI线程中执行,这就是BackgroundWorker的目的

BackgroundWorker bg2 = new BackgroundWorker();
bg2.DoWork +=new DoWorkEventHandler(bg2_DoWork);
.ProgressChanged += new ProgressChangedEventHandler(bg2_ProgressChanged)
bg2.RunWorkerAsync();

void bg2_DoWork(object sender, DoWorkEventArgs e)
    {

        while (bg1.IsBusy)
            worker.ReportProgress(totalProgress);
    }
private void bg2_ProgressChanged(object sender,
            ProgressChangedEventArgs e)
        {
            DrawWellPlate.pbar.Value = e.ProgressPercentage;
        }

查看this了解更多详情

【讨论】:

  • 谢谢。我会试一试的。
【解决方案2】:

问题是 bg1 在运行其 DoWork 方法时会总是报告它很忙。

您应该只使用一个后台工作人员,并在其 do 工作方法中使用类似这样的内容(伪代码):

void bg1_DoWork(object sender, DoWorkEventArgs e)
{
    while(got_stuff_to_add_to_the_database)
    {
       //do *some* of the work
       AddABit()

       //Update the progress - 5% at a time?
       totalProgress += 5

       //update the progress bar
       ReportProgress(totalProgress)

       if(finished)
       {
           got_stuff_to_add_to_the_database = false;
       }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-26
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多