【问题标题】:Updating a status on a Winform in BackgroundWorker在 BackgroundWorker 中更新 Winform 的状态
【发布时间】:2010-03-16 14:00:36
【问题描述】:

我有一个多步骤的 BackgroundWorker 进程。我使用选取框进度条是因为其中几个步骤在 iSeries 服务器上运行,因此没有任何确定百分比的好方法。我所设想的是每一步后都有更新的标签。您如何建议更新 winform 上的标签以反映每个步骤?

我想我会添加更多。我通过 iSeries(或 IBM i 或 AS/400 或运行 OS/400 的中端计算机......呃......年复一年))。

无论如何,我必须等到该步骤完全完成才能继续在 winform 方面。我正在考虑向用户发送反馈,给出主要步骤。

  1. 将数据转储到 iSeries
  2. 月末运行
  3. 创建报告
  4. 上传最终结果

我可能应该在一开始就给出这个。对于那个很抱歉。我尽量让我的问题足够笼统,以供其他人稍后使用,而不是我的具体任务。

【问题讨论】:

    标签: winforms progress-bar backgroundworker


    【解决方案1】:

    这本质上是后台工作人员的要点之一。使用ProgressBar 并根据您的算法确定进度有多远。

    (如前所述,如果完成 10%,发送 10,如果完成 50%,发送 50

    使用BackgroundWorker bgWrk

    添加以下事件:

    bgWrk.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(bgWrk_ProgressChanged);
    // Note: This method is invoked on the UI thread
    
    void bgWrk_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
    {
        // Add progress to whatever UI element needs updating. The below simply uses a progress bar.
        prog.Value = e.ProgressPercentage;
    }
    

    在您认为值得用户更新的每个主要步骤之后,请执行以下操作:

    bgWrk.ReportProgress(intValue);

    几点说明:

    • 您也可以在ReportProgress() 方法中传递Object,这样您就可以使用字符串对象等更新标签,但是进度条仍然是“等等,我在做事”

    • 如果您有任何不确定的轮询,并且您正在使用 ProgressBar,请尝试将其用作 Indeterminate ProgressBar 或微调器等。 WPF 有一个内置属性可以使进度条不确定,这很有用。

    【讨论】:

    • 您遗漏了 Rozendo 的一件事:ProgressChanged 事件 - 该方法是在 UI 线程还是在后台线程调用的?
    • 它将在 UI 线程上调用。它被设计为能够特别与 ProgressBars 一起使用。这就是为什么 EventArgs 提供了一个百分比来访问这个功能。
    【解决方案2】:

    有多少步?如果有 10 个步骤,只需在成功完成的每个步骤的末尾使用 10% 的步进标记即可。

    【讨论】:

    • iSeries 上的步骤超过了我无法与 C# 交流的步骤的 50%。我想我还是可以按百分比更新。
    • 哦....iSeries 和大型机一样?还是 AIX 盒子?我会相应地编辑这个答案......
    • IBM i 或 AS/400 或中端计算机中的 iSeries。它运行 OS/400,被调用的逻辑在 CL 和 RPG 中。我必须通过存储过程调用它,我必须等到它成功完成才能继续下一步。
    • Ahhh...AS/400...命令语言 (CL) 以及您如何连接到它?您在与 TCP/IP 端口通话...CL 脚本是否将状态发送回 TCP/IP 端口?
    • 通过 IBM 的 ADO.NET 提供程序。它似乎是一个优化的 ODBC 连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2023-01-28
    • 1970-01-01
    • 2022-01-05
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多