- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个后台工作人员报告计算进度。它在 ProgressChangedEventArgs 中返回它正在处理的当前行号。我可以从那里确定完成的百分比
(int) (100 * (double)e.ProgressPercentage / csTextLines)
其中 csTextLines 是我正在处理的行数。我遇到的麻烦是我还想获得总估计时间和总剩余时间。我在后台工作人员中没有看到任何可以帮助我的东西,所以我想这必须通过 DateTime 计算来完成。这是我到目前为止所做的尝试获取 TotalEstTime 和 TimeLeft
在哪里
在哪里
所以如果我们把它变成我目前拥有的代码
// This event handler updates the progress.
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
TimeSpan difInCalls = DateTime.Now.Subtract(m_LastProgressCall);
m_LastProgressCall = DateTime.Now;
m_totalDif = m_totalDif.Add(difInCalls);
TimeSpan avgDif = new TimeSpan(0, 0, 0, 0, ((int)m_totalDif.TotalMilliseconds / m_csNumLines));
double totalTime = m_csNumLines * avgDif.TotalSeconds;
double timeLeft = totalTime - (DateTime.Now.Subtract(m_Form2Start).TotalSeconds);
Console.WriteLine("TotalEstTime: " + totalTime + " TimeLeft: " + timeLeft);
// Update the progress label
resultLabel.Text = "Line " + e.ProgressPercentage.ToString() + " of " + m_csNumLines + " at " + (int)(100 * (double)e.ProgressPercentage / m_csNumLines) + "% loaded";
}
我遇到的问题是我的 TotalTime 会随着处理的行数显着增加。在 1437 行字符串中,它开始时说我有 1.4 秒,最后它估计还剩 18.6 秒。而实际上需要 16.54s 才能完成。
我的第二个问题是剩下的时间并没有真正改变。它在大约 1.1 和 2.5 之间波动。
可以归因于什么?可能是什么问题?
这是完整的代码:http://pastebin.com/x1CCceY7
最佳答案
问题是您计算的是上次进度时间,该时间可能会随着您的进展而波动。如果您从开始时间和当前时间开始工作,并使用完成百分比,那么您会发现时间会随着您的移动而“ self 调整”。
例如,如果您将 DateTime.Now
存储到一个变量中(例如 m_operationStart
,使用您的命名),您可以这样写:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage != 0)
{
double percentageComplete = (double)e.ProgressPercentage / m_csNumLines;
TimeSpan timeSinceStart = DateTime.Now.Subtract(m_operationStart);
TimeSpan totalTime = TimeSpan.FromMilliseconds(timeSinceStart.TotalMilliseconds / percentageComplete);
TimeSpan timeLeft = totalTime - timeSinceStart;
Console.WriteLine("TotalEstTime: " + totalTime + " TimeLeft: " + timeLeft);
// Update the progress label
resultLabel.Text = "Line " + e.ProgressPercentage.ToString() + " of " + m_csNumLines + " at " + (int)(100.0 * percentageComplete) + "% loaded";
}
else
resultLabel.Text = "Line " + e.ProgressPercentage.ToString() + " of " + m_csNumLines;
}
关于c# - 计算后台工作人员 OnProgressChanged 事件的总剩余时间和总时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041296/
是否有用于手动测试的代码覆盖工具?比如我新写了30行代码,编译,然后运行,有什么办法可以快速验证这30行都运行了吗? 另外,后来,在我将代码 checkin 正式版本后,有什么方法可以验证测试部门在进
老实说,这是一个家庭作业问题,但我已经浪费了好几个小时,而且无法正确解决。它返回错误数量的结果或错误的数据: 我需要选择参与指导电影和/或在电影中表演的每个人以及他们所做的次数,如果至少 5 次。 有
我正在尝试测试 MacOS 的应用内购买。输入测试用户凭据后,App Store 提示:“当前收据无效或 ds 人员 ID 不匹配。”并且购买失败。 最佳答案 我尝试了很多方法来解决这个问题。 Get
我正在为 Jenkins 使用 ActiveDirectory 插件,因此用户必须使用他们的凭据登录到 Jenkins。然后用户在 Jenkins 中被称为 joe.doe,这很完美。 当同一个人 c
如何从 Infopath 人员/组选取器检索电子邮件地址?当我将人员/组选取器添加到 infopath 表单时,我只得到 3 个字段 DisplayName、AccountId、AccountType
在 Snow Leopard 中,可以在 iCal 事件中显示空闲/忙碌时间。我搜索了 CalStore.framework 的 header ,但找不到任何描述该字段的属性。如何检索日历事件的忙/闲
是否有人成功地从专门针对 SharePoint 2013 的新建或编辑表单中获取用户(个人或组)字段的值? 我已经尝试了通过搜索互联网找到的所有解决方案以及我自己能想到的所有解决方案,所有结果都为空白
所以我需要将一个 Twitter 帐户添加到 ABRecordRef 中。然而,最快的方法似乎是获取社交资料属性的多值引用,创建它的可变版本,查找它是否有 Twitter 条目,如果已经有,则创建
我正在尝试将使用 Tomcat(最初是 5.5,但可以与 7 一起使用)在 MyEclipse 中开发的应用程序部署到我们的演示服务器 (Sun Java Web Server 7)。不幸的是,所有设
我是一名优秀的程序员,十分优秀!