我的应用程序中有以下代码:
Task.Factory.StartNew( () =>
{
progressReporter.ReportProgress(() =>
{
stopWatch.Start();
lblStatus.Text = "We've begun!";
});
int c = 0;
DateTime starttime = DateTime.Now;
foreach (string file in fileList)
{
c++;
csvCreator.createCSV(file);
progressReporter.ReportProgress(() =>
{
//Estimated time remaining
if (c % 100 == 0)
{
TimeSpan timespent = DateTime.Now - starttime;
int secondsremaining = (int)(timespent.TotalSeconds / c * (total - c));
TimeSpan t = TimeSpan.FromSeconds(secondsremaining);
lblTimeRemaining.Text = string.Format("{0:D2}h:{1:D2}m:{2:D2}s",
t.Hours,
t.Minutes,
t.Seconds,
t.Milliseconds);
}
//Progress bar
int percentComplete = (c * 100 / total);
if ((int)percentComplete <= progressBar.Maximum)
{
progressBar.Value = (int)percentComplete;
}
}
});
}
现在,我的代码会检查每100次迭代并更新UI。我宁愿每秒检查一下,以提供更好的用户体验。
关于如何做到这一点的任何想法?
答案 0 :(得分:2)
您可以使用timer对象
答案 1 :(得分:1)
而不是if (c%100==0)
,请查找您的stopWatch
:它是否达到1秒?如果是 - >更新ui。
当然,请在每次更新UI后重置stopWatch
。
也就是说,请注意更新UI需要消息循环运行。如果UI线程卡在文件处理循环中,则UI将无法正确更新。