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

rvk*_*rvk 1 c# asynchronous winforms progress-bar

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

事件:

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

等...

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

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

compute.cs

form.SetStatus(eventId,eventStatus);

form.cs

委托void SetMetricStatusDelegate(字符串度量,字符串状态);

public void SetMetricStatus(字符串度量,字符串状态){...}

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

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

Jus*_*les 8

在执行长时间运行的任务时,UI画图暂停.

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

请参阅:BackgroundWorker类

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