0

我在 WPF 中有一个进度条,我在 x 时间段内为它设置了一个故事板动画,从 0-90 填充,这可能会根据正在执行的任务而改变。

是否可以允许其故事板动画在不同的线程中播放,然后在需要时插入其中以更改进度条的各种属性?

4

2 回答 2

3

尽管 Laurent 可能会回答您的实际问题,但正确答案是否定的。

Progressbar 只能在 UI 线程上运行。

向 ProgressBar 报告进度的进程可以在不同的线程上运行,但 ProgressBar 的更新需要在 UI 线程上运行。

您建议的设置可能会导致 ProgressBar 无法提供正确的作业状态。最好让进程报告其状态,而不是尝试同步进程和动画。

动画可能还需要在 UI 线程上运行,因为您可能将 ProgressBar 的属性绑定到动画。

于 2012-09-20T04:49:05.527 回答
2

根据劳伦特的评论...

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();
于 2012-09-20T04:39:48.357 回答