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

时间:2011-03-11 02:16:14

标签: c# winforms asynchronous progress-bar

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

活动:

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

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

    为简单起见,我说我有一个文件compute.cs和form.cs.我的表单启动了,我按下'execute'运行compute.cs脚本,该脚本通过以下方式将其状态转发回表单:

    compute.cs

      

    form.SetStatus(eventId,eventStatus);

    form.cs

      

    委托void SetMetricStatusDelegate(字符串指标,字符串状态);

         

    public void SetMetricStatus(字符串指标,字符串状态){...}

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

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

1 个答案:

答案 0 :(得分:8)

执行长时间运行的任务时,您的UI画面暂停。

您需要生成与UI分开的线程来执行长任务。

请参阅:BackgroundWorker Class

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