我在我的应用中添加了一个确定的进度条,这是一个间歇训练应用。 计时器启动一段设定的秒数,然后停止设定的秒数,然后重复这个序列一定数量的轮次,非常类似于应用程序:
这是我的代码中进度条的声明:
ProgressBar IsIndeterminate="False" x:Name="overallProgressBar" Maximum="100" Width="200" Margin="114,214,142,288" FontWeight="Bold" Style="{StaticResource ProgressBarStyle2}"
这就是我调用的方法设置进度条在timer_tick中递增:
void myTimer_Tick(object sender, EventArgs e)
{
// update the textblock on the display
// with hh, mm, ss, ms
ms = myStopwatch.ElapsedMilliseconds;
ss = ms / 1000;
ms = ms % 1000;
mm = ss / 60;
ss = ss % 60;
hh = mm / 60;
mm = mm % 60;
overallProgressBar.Value = ms;
tblDisplay.Text = hh.ToString("00") + " : " +
mm.ToString("00") + " : " +
ss.ToString("00") + " : " +
ms.ToString("000");
//method to trigger timer stop and start at user input intervals
intervalTrigger(ref workTm, ref restTm);
}
目前,此代码只运行进度条,在大约5秒后完成,这与正在输入的轮次不同步。
我正在尝试设置我的进度条以按顺序运行这些操作,有人知道我将如何实现这一目标吗?
答案 0 :(得分:2)
ProgressBar
应该完全代表什么?你的问题不是很清楚。
假设名为TimeSpan
的{{1}}字段定义workTimeSpan
测量的间隔的持续时间,并假设您要在该间隔内显示进度:
ProgressBar
WPF中更好的版本会将控件值绑定到属性,但上述方法可以正常工作。
如果void myTimer_Tick(object sender, EventArgs e)
{
overallProgressBar.Value =
myStopwatch.ElapsedMilliseconds / workTimeSpan.TotalMilliseconds * 100;
// update the textblock on the display
// with hh, mm, ss, ms
tblDisplay.Text = myStopwatch.Elapsed.ToString("hh:mm:ss.fff");
//method to trigger timer stop and start at user input intervals
intervalTrigger(ref workTm, ref restTm);
}
应该代表其他内容,那么请具体说明它应该代表什么,代码中的信息在哪里,以及它是如何更新的。见https://stackoverflow.com/help/mcve
答案 1 :(得分:1)
估算每个操作的完成百分比,然后在每次任务完成时将进度条调整为完成百分比的函数。
一般来说,您无法通过使用计时器来创建确定的进度条,因为您无法知道您的操作实际需要多长时间。