【问题标题】:C# - How to properly use progress bars (GUI's)C# - 如何正确使用进度条(GUI)
【发布时间】:2011-03-11 02:16:13
【问题描述】:

我想制作一个进度条来跟踪我正在执行的每个事件的状态,而不是一个静默程序或带有控制台的程序。

事件:

  1. 读取/解析文件
  2. 读取 Excel 文件
  3. 数据库 查询

等等……

现在,在我完成其中一项任务后,我会增加进度条以指示它已完成,并且我向 DataGridTable 写入状态已从“正在计算...”更改为“完成”。

为简单起见,假设我有一个文件 compute.cs 和 form.cs。我的表单启动,然后按“执行”运行 compute.cs 脚本,该脚本通过以下方式将其状态传递回表单:

compute.cs

form.SetStatus(eventId, eventStatus);

form.cs

delegate void SetMetricStatusDelegate(string metric, string status);

public void SetMetricStatus(string metric, string status) { ... }

最后,问题。我运行我的程序,每个任务大约需要三秒钟才能完成,但进度条和表格没有更新。所有事件完成后,进度条和表格就会正确更新。

在 C# 表单上使用进度条记录进度的正确方法是什么?

【问题讨论】:

    标签: c# winforms asynchronous progress-bar


    【解决方案1】:

    在执行长时间运行的任务时,您的 UI 绘制正在暂停。

    您需要生成一个独立于 UI 的线程来执行长任务。

    见:BackgroundWorker Class

    请注意,从未创建 UI 控件的线程访问 UI 控件会引发异常。幸运的是,BackgroundWorker 具有您可以在线程完成时订阅的事件。

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 2022-01-11
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多