我在 WPF 中有一个进度条,我在 x 时间段内为它设置了一个故事板动画,从 0-90 填充,这可能会根据正在执行的任务而改变。
是否可以允许其故事板动画在不同的线程中播放,然后在需要时插入其中以更改进度条的各种属性?
我在 WPF 中有一个进度条,我在 x 时间段内为它设置了一个故事板动画,从 0-90 填充,这可能会根据正在执行的任务而改变。
是否可以允许其故事板动画在不同的线程中播放,然后在需要时插入其中以更改进度条的各种属性?
尽管 Laurent 可能会回答您的实际问题,但正确答案是否定的。
Progressbar 只能在 UI 线程上运行。
向 ProgressBar 报告进度的进程可以在不同的线程上运行,但 ProgressBar 的更新需要在 UI 线程上运行。
您建议的设置可能会导致 ProgressBar 无法提供正确的作业状态。最好让进程报告其状态,而不是尝试同步进程和动画。
动画可能还需要在 UI 线程上运行,因为您可能将 ProgressBar 的属性绑定到动画。
根据劳伦特的评论...
void startProgress()
{
ThreadStart ts = new ThreadStart(Go);
Thread t = new Thread(ts);
t.Start();
}
void Go()
{
double val = 0;
while (val < 100)
{
Thread.Sleep(50);
Dispatcher.Invoke(new action(() =>
{
MyProgressBar.Value += 0.5;
val = MyProgressBar.Value;
}));
}
}
delegate void action();