Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF ProgressBar更新过快时会失去光泽-bug?_C#_Wpf_Listview_Animation_Progress Bar - Fatal编程技术网

C# WPF ProgressBar更新过快时会失去光泽-bug?

C# WPF ProgressBar更新过快时会失去光泽-bug?,c#,wpf,listview,animation,progress-bar,C#,Wpf,Listview,Animation,Progress Bar,好的,所以我在处理WPF ProgressBar控件时发现了一些非常奇怪的行为。此控件位于ListView控件的一列中,一般情况与它的本质差别不大 我通过几个属性(Min,Max,Value)将Progressbar绑定到一个类,显然所有这些都是单向绑定。另一个类从另一个线程更新,并定期使用INotifyPropertyChanged接口让ProgressBar知道状态正在进行。这一切都很好 但这里有点奇怪。我的进度条失去了光泽。。直到达到最大值(=100%)为止。然后它突然开始在绿色的条上跳动

好的,所以我在处理WPF ProgressBar控件时发现了一些非常奇怪的行为。此控件位于ListView控件的一列中,一般情况与它的本质差别不大

我通过几个属性(
Min
Max
Value
)将
Progressbar
绑定到一个类,显然所有这些都是单向绑定。另一个类从另一个线程更新,并定期使用
INotifyPropertyChanged
接口让ProgressBar知道状态正在进行。这一切都很好

但这里有点奇怪。我的进度条失去了光泽。。直到达到
最大值(=100%)为止。然后它突然开始在绿色的条上跳动它的白色发光的东西,这是非常恼人的。我展示进步是有原因的,一旦你开始注意到脉搏不在那里,脉搏的缺乏实际上是相当分散注意力的

因此,我开始调试。我发现在我的线程处理中使用
Thread.Sleep(1000)
时,它仍然隐藏了光晕,但是如果我将它撞到
Thread.Sleep(1500)
上,光晕总是以疯狂的活力回来。在那之后,我尝试将我的进度单位转换为更小的数字,这样更改整数值需要更长的时间。最小值为0,最大值为100仍然缺少光晕。最小值为0,最大值为10,使光晕恢复到其全部活力。在所有情况下,达到100%所花费的工作量和时间都是相同的,但对于辉光显示而言,这是一个非常明显的二元是/否效果。我唯一没有测试的是,当ProgressBar未放置在此ListView控件中时,是否也会发生这种情况

我非常了解自己,以至于我无法理解ProgressBar控件(涉及XAML)的深层WPF内部。所以我希望这里的任何人都知道这是一个已知的bug,他们偶然发现的东西,或者他们甚至知道如何解决/修复的东西


我的机器运行Windows 7,我正在VS2010中针对.NET Framework 4客户端配置文件进行开发。

我猜你会失去热情,因为你经常更新进度条每次设置一个新值时,进度条都会重新启动其发光动画(我想-我还没有测试过,我正在从头开始写)

看起来你可能也想到了同样的事情,并试图解决它,但我不确定你是否已经用尽了所有的可能性:

  • 尝试创建一个检查,如果(progressbar.Value==newValue)不执行progressbar.Value=newValue
  • Progressbar的最小值、最大值应使用小数。确保不要对每个小数点进行更新,例如-10,1;10,2; 10,3; 等(使用progressbar.Value=(int)newValue;)
  • 尝试以更大的增量设置progressbar值,而不是增量=1,使用增量=10
  • 您可以尝试在ListView之外使用progressbar,可能是progressbar在其中时出现了渲染错误
  • PS!如果非常快速地更新进度条,则辉光动画可以不运行。请记住,glow动画的目的只是显示应用程序仍在运行(机器未冻结),尽管进度(条)未移动。

    如果进度移动得很快,那么这本身就是用户的视觉效果,因此此时无需使用光晕动画…

    我猜您会失去光晕,因为您经常更新进度条每次设置一个新值时,进度条都会重新启动其发光动画(我想-我还没有测试过,我正在从头开始写)

    看起来你可能也想到了同样的事情,并试图解决它,但我不确定你是否已经用尽了所有的可能性:

  • 尝试创建一个检查,如果(progressbar.Value==newValue)不执行progressbar.Value=newValue
  • Progressbar的最小值、最大值应使用小数。确保不要对每个小数点进行更新,例如-10,1;10,2; 10,3; 等(使用progressbar.Value=(int)newValue;)
  • 尝试以更大的增量设置progressbar值,而不是增量=1,使用增量=10
  • 您可以尝试在ListView之外使用progressbar,可能是progressbar在其中时出现了渲染错误
  • PS!如果非常快速地更新进度条,则辉光动画可以不运行。请记住,glow动画的目的只是显示应用程序仍在运行(机器未冻结),尽管进度(条)未移动。
    如果进展很快,那么这本身就是用户的视觉效果,因此此时不需要有发光动画