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

C# C-如何正确使用进度条(GUI),c#,winforms,asynchronous,progress-bar,C#,Winforms,Asynchronous,Progress Bar,我想制作一个进度条来跟踪我正在做的每个事件的状态,而不是一个静默程序或一个带有控制台的程序 活动: 读取/解析文件 读取Excel文件 数据库 询问 等等 现在,在我完成其中一项任务后,我增加进度条以指示它已完成,并向DataGridTable写入状态已从“计算…”更改为“完成” 为简单起见,假设我有一个compute.cs和form.cs文件。我的表单启动后,我按“执行”运行compute.cs脚本,该脚本通过以下方式将其状态传回表单: compute.cs form.SetStatuseve

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

活动:

读取/解析文件 读取Excel文件 数据库 询问 等等

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

为简单起见,假设我有一个compute.cs和form.cs文件。我的表单启动后,我按“执行”运行compute.cs脚本,该脚本通过以下方式将其状态传回表单:

compute.cs

form.SetStatuseventId,事件状态

form.cs

委托无效SetMetricStatusDeleteGateString度量,字符串状态

public void SetMetricStatusstring度量,字符串状态{…}

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


在C窗体上使用进度条记录进度的正确方法是什么?

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

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

见:


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

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

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

见:

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