如何更新进度条,因此增加了顺利?(How to update a progress bar so i

2019-07-18 14:56发布

我使用的WPF(C#)进度条描述这一过程的进展情况。

我的算法是如下:

DoSomethingCode1();
ProgressBar.SetPercent(10); // 10%
DoSomethingCode2();
ProgressBar.SetPercent(20); // 20%

...

DoSomethingCode10();
ProgressBar.SetPercent(100); // 100%

这没关系,但它将使进度条不相继式。

有人能告诉我一些建议,使进度条轻声更新?

Answer 1:

你可以把BeginAnimation方法进行动画处理的ProgressBarValue属性。 在我下面的例子,我用了一个DoubleAnimation

我创建了一个发生在所需的百分比扩展方法:

public static class ProgressBarExtensions
{
    private static TimeSpan duration = TimeSpan.FromSeconds(2);

    public static void SetPercent(this ProgressBar progressBar, double percentage)
    {
        DoubleAnimation animation = new DoubleAnimation(percentage, duration);
        progressBar.BeginAnimation(ProgressBar.ValueProperty, animation);          
    }
}

因此,在你的代码,你可以直接电话咨询:

myProgressBar.SetPercent(50);

这样做,根本出平滑过渡,所以它看起来更好。 引述另一回答 :“我们的想法是,一个进度条报告的实际进展 -不经过时间它并非是一个动画,只是表示事情正在发生 。” 然而,进度条的默认样式确实有这可能意味着工作发生脉动的效果。



Answer 2:

您可以使用行为!

public class ProgressBarSmoother
{
    public static double GetSmoothValue(DependencyObject obj)
    {
        return (double)obj.GetValue(SmoothValueProperty);
    }

    public static void SetSmoothValue(DependencyObject obj, double value)
    {
        obj.SetValue(SmoothValueProperty, value);
    }

    public static readonly DependencyProperty SmoothValueProperty =
        DependencyProperty.RegisterAttached("SmoothValue", typeof(double), typeof(ProgressBarSmoother), new PropertyMetadata(0.0, changing));

    private static void changing(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var anim = new DoubleAnimation((double)e.OldValue, (double)e.NewValue, new TimeSpan(0,0,0,0,250));
        (d as ProgressBar).BeginAnimation(ProgressBar.ValueProperty, anim, HandoffBehavior.Compose);
    }
}

你的XAML应该是这样的:

<ProgressBar local:ProgressBarSmoother.SmoothValue="{Binding Progress}">

每当Progress要绑定在XAML的变化特性,在ProgressBarSmoother行为的代码将运行,与适当的值加动画的进度条,你ToFrom



Answer 3:

检查您是否可以修改进度的样式和设置缓动函数,以它的故事板可修改通过这样做,将有一个平稳过渡的进度和“填充”。



Answer 4:

尝试了这一点。

private void updateProgressBar(int percent)
    {
        if (ProgressBar.InvokeRequired)
        {
            updateProgressBarCallback cb = new updateProgressBarCallback(updateProgressBar);
            this.Invoke(cb, new object[] { percent });
        }
        else
        {
            ProgressBar.Value = percent;
            ProgressBar.Update();
            ProgressBar.Refresh();
            ProgressBar.Invalidate();
        }


文章来源: How to update a progress bar so it increases smoothly?