我想制作一个进度条来跟踪我正在执行的每个事件的状态,而不是静默程序或带有控制台的程序。
事件:
- 读取/解析文件
- 阅读 Excel 文件
- 数据库 查询
等...
现在,在我完成其中一项任务后,我会递增进度条以指示它已完成,然后我将状态已从“正在计算...”更改为“完成”的 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 的线程来执行其中的长任务。
请注意,从未创建它们的线程访问 UI 控件会引发异常。幸运的是,BackgroundWorker 具有您可以在线程完成时订阅的事件。
关于C# - 如何正确使用进度条 (GUI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268260/