【问题标题】:How to update the progress bar through Backgroundworker in C#? [duplicate]如何通过 C# 中的 Backgroundworker 更新进度条? [复制]
【发布时间】:2013-08-27 12:22:47
【问题描述】:

我有一个后台工作者,它通过 C# 函数GenerateExcel() 生成 Excel 文件。在 GenerateExcel() 函数中,我使用进度条来更新状态。但是,它抛出了一个异常,我无法修改 GUI 控件。 知道代码中的错误可能是什么吗?

BackgroundWorker backgroundWorker1 = new BackgroundWorker();

backgroundWorker1.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs args)
{
    GenerateExcel(FileName, 1);
});

backgroundWorker1.RunWorkerAsync();

谢谢

【问题讨论】:

  • 设法找到后台工作人员。找不到使用示例。它就在官方课程文档msdn.microsoft.com/en-us/library/… 的此处,使用 1.4k 代表你应该知道得更好。这个问题就是污染。当您键入问题标题时,SO 甚至会建议类似的问题。懒惰。
  • 我刚刚注意到您的个人资料显示“我不喜欢什么:当我提出问题时人们用 RTFM 回应”。哈哈。欢迎编程。
  • @Gusdor,我很抱歉,我按照建议做了很多尝试,但我无法让它工作。你知道,我有点不安。现在我已经开始工作了,非常感谢您指出这一点。

标签: c# progress-bar backgroundworker


【解决方案1】:

您需要创建一个 BackgroundWorker.ReportProgress 事件的实例。然后在该方法中更新进度条。

BackgroundWorker.ReportProgress += new ReportProgressEventHandler()....

(语法可能不正确,但你明白了)

【讨论】:

    【解决方案2】:

    希望你得到 - System.InvalidOperationException - 跨线程操作无效 - 异常 - 这篇文章可能对你有所帮助 - http://www.dotnetthoughts.net/system_invalidoperationexception_cross_thread_operation_not_valid/

    【讨论】:

      【解决方案3】:

      您需要控制 Backgroundworker 事件ProgressChanged,并且在 main 方法中,不要更改进度条,而是使用:

      BW1.ReportProgress(iProg)
      

      在您的事件中,修改 Progressbar 以检索 ProgressChangedEventArgs 中的值:

      ProgressBar1.Value = e.ProgressPercentage
      

      【讨论】:

        猜你喜欢
        • 2019-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        相关资源
        最近更新 更多