C# WPF进度条未正确更新
我有一个窗口,显示一些要做的活动,每个活动都有一个进度条,在活动需要完成的时间过去时,进度条必须相应地进行。 我使用了一个调度计时器,但我在逻辑上遇到了困难,所以我会有奇怪的行为,比如酒吧被正确地填满了4次,然后总是立即达到100% 这是我控制的代码:C# WPF进度条未正确更新,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我有一个窗口,显示一些要做的活动,每个活动都有一个进度条,在活动需要完成的时间过去时,进度条必须相应地进行。 我使用了一个调度计时器,但我在逻辑上遇到了困难,所以我会有奇怪的行为,比如酒吧被正确地填满了4次,然后总是立即达到100% 这是我控制的代码: private void InitializeDispatcherTimer() { var dispatcherTimer = new System.Windows.Threading.Dispatch
private void InitializeDispatcherTimer()
{
var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
dispatcherTimer.Start();
WhenTimerStarted = DateTime.Now;
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
foreach (var activity in ViewModel.Activities)
{
var mySeconds = DateTime.Now.Subtract(WhenTimerStarted).TotalSeconds;
if (activity.duration != null)
{
var myDurationInSeconds = (Double)activity.Duration.Value.TotalSeconds;
activity.Progress = (mySeconds * 100) / myDurationInSeconds;
}
if (activity.Progress == 100)
{
WhenTimerStarted = DateTime.Now;
}
}
}
这是xaml文件中的条形图:
<ProgressBar x:Name="progress" Grid.Row="3" Value="{Binding Path=Progress, UpdateSourceTrigger=PropertyChanged}" Maximum="100"/>
Activities是一个由4个ActivityViewModel组成的数组,因此每个activity都是一个视图模型。
当一个活动完成时,在另一个类中,我有一个名为activity_Done()的事件,在该事件中我将activity.Progress设置为零,因此栏被清空
我想问题出在变量mySeconds上,因为随着计时器的运行和时间的流逝,它变得越来越大,所以除以myDurationInSeconds会得到很大的结果(?),我不知道在哪里重置它,或者我混淆了Dispatcher.Interval的用途,它与每个活动的持续时间和剩余时间有关。
或者我只需要重新思考一下滴答的逻辑,在这种情况下,我很乐意接受一些提示
另外,我需要指出的是,在我停止程序或关闭应用程序之前,程序需要完成大量活动。请注意,在值绑定上设置
UpdateSourceTrigger=PropertyChanged
。它只对双向或单向源绑定产生影响。谢谢,它将解决这个问题。此外,还不清楚您的逻辑应该如何工作。当任何活动达到100%时,您似乎正在重新设置何时开始。此外,将其与100进行比较似乎很危险。如果(activity.Progress>=100),则更好地检查。关键是,每次活动完成时,它都会被消除,并出现一个新的活动并开始,因此必须将条设置回0,并以新的持续时间进行进度(持续时间是随机的,当活动被推到队列中时生成)