C# 允许一个ProgessBar在一个单独的线程中运行,但偶尔会介入以控制它?

C# 允许一个ProgessBar在一个单独的线程中运行,但偶尔会介入以控制它?,c#,wpf,multithreading,progress-bar,C#,Wpf,Multithreading,Progress Bar,我在WPF中有一个进度条,我设置了一个故事板动画,在x个时间段内从0到90填充,这可能会根据正在执行的任务而改变 是否可以允许其故事板动画在不同的线程中播放,然后在需要时插入其中以更改进度条的各种属性?根据Laurent的评论 void startProgress() { ThreadStart ts = new ThreadStart(Go); Thread t = new Thread(ts); t.Start(); } void Go() { double

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


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

根据Laurent的评论

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();
void startProgress()
{
ThreadStart ts=新的ThreadStart(Go);
螺纹t=新螺纹(ts);
t、 Start();
}
void Go()
{
双val=0;
而(val<100)
{
睡眠(50);
Dispatcher.Invoke(新操作(()=>
{
MyProgressBar.Value+=0.5;
val=MyProgressBar.Value;
}));
}
}
委托无效操作();

根据劳伦特的评论

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();
void startProgress()
{
ThreadStart ts=新的ThreadStart(Go);
螺纹t=新螺纹(ts);
t、 Start();
}
void Go()
{
双val=0;
而(val<100)
{
睡眠(50);
Dispatcher.Invoke(新操作(()=>
{
MyProgressBar.Value+=0.5;
val=MyProgressBar.Value;
}));
}
}
委托无效操作();

虽然劳伦特可能回答了你的实际问题,但正确答案是否定的

Progressbar只能在UI线程上运行

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

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


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

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

Progressbar只能在UI线程上运行

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

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


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

您可以从其他线程使用[Dispatcher.Invoke][1]。[1] :不同的线程应该解决什么问题?您可以从另一个线程使用[Dispatcher.Invoke][1]。[1] :不同的线程应该解决什么问题?