C# - 如何正确使用进度条 (GUI)

标签 c# winforms asynchronous progress-bar

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

事件:

  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# 窗体上使用进度条记录进度的正确方法是什么?

最佳答案

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

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

参见:BackgroundWorker Class

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

关于C# - 如何正确使用进度条 (GUI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268260/

相关文章:

c# - 格式未在法国文化中应用

c# - 为什么在不安全的部分禁止等待?

c# mysql - 已经有一个与此连接关联的打开的数据读取器,必须先将其关闭

c# - 如何将 PictureBox 用作按钮

c# - 即使 DataGridView 绑定(bind)到列表,也不会显示任何记录

c# - 使用任务的经典永无止境的线程循环?

c# - 如何使 Entity Framework 异步执行

c# - 在 MVVM 中,使用 Entity Framework,什么填充了 View 模型?

c# - 如何在 DataGridView 中制作 ComboBox 列?

javascript - Ajax异步响应未加载到div中