C# 使用C中的计时器每1秒更新一次UI#

C# 使用C中的计时器每1秒更新一次UI#,c#,timer,C#,Timer,我的应用程序中有以下代码: Task.Factory.StartNew(()=> { progressReporter.ReportProgress(()=> { 秒表。开始(); lblStatus.Text=“我们已经开始了!”; }); int c=0; DateTime starttime=DateTime.Now; foreach(文件列表中的字符串文件) { C++; csvCreator.createCSV(文件); progressReporter.ReportProgress(

我的应用程序中有以下代码:

Task.Factory.StartNew(()=>
{
progressReporter.ReportProgress(()=>
{
秒表。开始();
lblStatus.Text=“我们已经开始了!”;
});
int c=0;
DateTime starttime=DateTime.Now;
foreach(文件列表中的字符串文件)
{
C++;
csvCreator.createCSV(文件);
progressReporter.ReportProgress(()=>
{
//预计剩余时间
如果(c%100==0)
{
TimeSpan timespunt=DateTime.Now-starttime;
int secondsremaining=(int)(timespent.TotalSeconds/c*(total-c));
TimeSpan t=TimeSpan.FromSeconds(秒维护);
lblTimeRemaining.Text=string.Format(“{0:D2}h:{1:D2}m:{2:D2}s”,
t、 小时,
t、 会议记录,
t、 秒,
t、 毫秒);
}
//进度条
完成百分比=(c*100/总数);
如果((int)percentComplete而不是
如果(c%100==0)
,请查找您的
秒表:它是否达到1秒?如果是->更新ui

当然,在每次UI更新后重置秒表

也就是说,请注意更新UI需要消息循环运行。如果UI线程卡在文件处理循环中,您的UI将无法正确更新。

如果(c%100==0)
,请查找您的
秒表
:是否达到1秒?如果是->更新UI

当然,在每次UI更新后重置秒表


也就是说,请注意更新UI需要消息循环运行。如果UI线程卡在文件处理循环中,您的UI将无法正确更新。

您可以使用对象

您可以使用对象

创建一个间隔为1s的计时器,并在每次计时时更新UI。您已经知道解决方案。但是您真正的专业问题可能是您在主线程中有一个耗时的任务。您需要在后台线程中执行该任务,并且需要在UI线程上调用UI更新。谢谢。我正在现有代码的上下文中使用Timer对象寻找特定的实现。CreateCVS是一个处理器密集型任务,但它确实在后台线程和ProgressReporter类允许我访问UI线程,以更新UI,保持一切良好和新鲜。只需创建一个计时器,设置它的属性,添加一个事件处理程序,就可以了。这就是它的全部内容。创建一个间隔为1s的计时器,并在每次计时时更新UI。您已经知道解决方案但是你真正的问题可能是你在主线程中有一个耗时的任务。你需要在后台线程中使用它,并且UI更新需要在UI线程上调用。谢谢。我正在现有代码的上下文中寻找使用计时器对象的具体实现。CreateCVS是一个处理器密集型任务,但是确实是在后台线程上运行的,ProgressReporter类允许我访问UI线程来更新UI,使一切都保持新鲜。只需创建一个计时器,设置它的属性,添加一个事件处理程序,就可以了。这就是它的全部功能。