我想制作一个进度条来跟踪我正在做的每个事件的状态,而不是一个静音程序,或一个带控制台的程序。
活动:
等...
现在,在我完成其中一个任务后,我会增加进度条以指示它已完成,并且我写入DataGridTable状态已从“正在计算...”更改为“完成”。
为简单起见,我说我有一个文件compute.cs和form.cs.我的表单启动了,我按下'execute'运行compute.cs脚本,该脚本通过以下方式将其状态转发回表单:
compute.cs
form.SetStatus(eventId,eventStatus);
form.cs
委托void SetMetricStatusDelegate(字符串指标,字符串状态);
public void SetMetricStatus(字符串指标,字符串状态){...}
最后,问题。我运行我的程序,每个任务大约需要三秒钟才能完成,但进度条和表格没有更新。完成所有事件后,进度条和表格会正确更新。
使用C#表单上的进度条记录进度的正确方法是什么?
答案 0 :(得分:8)
执行长时间运行的任务时,您的UI画面暂停。
您需要生成与UI分开的线程来执行长任务。
请注意,从未创建UI控件的线程访问UI控件会引发异常。幸运的是,BackgroundWorker具有可在线程完成时订阅的事件。