无法从backgroundWorker1.ReportProgress更新ListBox正确的方式

时间:2014-06-27 19:27:19

标签: c# listbox backgroundworker

尝试从backgroundWorker1_ProgressChanged更新列表框,但backgroundWorker1_DoWork完成其过程时会这样做。我想在backgroundWorker1_DoWork仍在执行之前更新列表框,并定期调用backgroundWorker1.ReportProgress并更新列表框。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // loops
    backgroundWorker1.ReportProgress(1, list);// sending list to listbox
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    dynamic a = e.UserState;
    BeginInvoke((MethodInvoker)delegate
              { listbox1.Items.Add(a[0]); });
    // updates after backgroundWorker1_DoWork is executed?
}

1 个答案:

答案 0 :(得分:0)

答案:请添加延迟

private void OnDataReceived(object sender, DataReceivedEventArgs e) {
  if (!String.IsNullOrEmpty(e.Data)) {
    backgroundWorker1.ReportProgress(1, e.Data);
    System.Threading.Thread.Sleep(300);
  }
}