c# - WPF ProgressBar 在更新太快时会失去光泽 - 错误?

标签 c# wpf listview animation progress-bar

好的,所以我在摆弄 WPF ProgressBar 控件时发现了一些相当奇怪的行为。该控件位于ListView控件的一列中,大体上与this question & answer区别不大本质上。

我通过几个属性(MinMaxValue)将 Progressbar 绑定(bind)到一个类,所有单向绑定(bind)显然。这个其他类从另一个线程更新,并定期使用 INotifyPropertyChanged 接口(interface)让 ProgressBar 知道状态正在进行中。这一切都很棒!

但这就是奇怪的地方。我的 ProgressBar 失去了它的光芒.. 直到它达到 Max (=100%) 值的那一刻。然后它突然开始在整个绿色条上闪烁白色发光的东西,这非常烦人。我展示进步是有原因的,一旦你开始注意到它不存在,缺乏脉搏实际上会让人分心。

于是,我开始调试了。我发现在我的线程处理中使用 Thread.Sleep(1000),它仍然隐藏了发光,但是如果我将它撞到 Thread.Sleep(1500),发光就会出现随时以疯狂的活力回来。在那之后,我尝试将我的进度单位转换为更小的数字,这样整数值就需要更长的时间来改变。 Min 0, Max 100 仍然有发光的不足。 Min 0, Max 10 让光芒重新焕发活力。在所有情况下,达到 100% 所花费的工作量和时间都是相同的,但就发光显示而言,这是非常明显的二元“是/否”效果。我唯一没有测试过的是当 ProgressBar 没有放在这个 ListView 控件中时是否也会发生这种情况。

我非常了解自己,无法理解 ProgressBar 控件(涉及 XAML)的深层 WPF 内部结构。所以我希望这里的任何人都知道这是一个已知错误、他们偶然发现的错误,还是他们甚至可能知道如何解决/修复的错误。

我的机器运行 Windows 7,我正在 VS2010 中开发目标 .NET Framework 4 Client Profile。

最佳答案

我会猜测并说你失去了光彩,因为你经常更新你的进度条。 每次您设置一个新值时,进度条都会重新开始其发光的动画(我想 - 我还没有测试过这个,我在想什么)。

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

  1. 尝试创建一个检查,如果 (progressbar.Value == newValue) 不执行 progressbar.Value = newValue;
  2. 进度条应使用小数表示最小值、最大值和值。确保您不对每个小数点进行更新,例如。 - 10,1; 10,2; 10,3;等等...(使用 progressbar.Value = (int)newValue;)
  3. 尝试以更大的增量设置进度条值,而不是 increment = 1,使用 increment = 10;
  4. 您可以尝试在 ListView 之外使用进度条,也许进度条在其中存在渲染错误。

附言!如果你更新进度条的速度非常快,那么发光动画不运行也没关系。请记住,发光动画的目的只是为了表明应用程序仍在运行(机器没有卡住),尽管进度(栏)没有移动。
如果进度很快,那么这本身就是用户的视觉效果,所以此时不​​需要发光动画...

关于c# - WPF ProgressBar 在更新太快时会失去光泽 - 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930478/

相关文章:

android - 如何检索 firebase 中的数据?

android - 如何在 Android ListView 中处理带有复选框的 ListView 项的单击事件?

c# - ListView 页脚行 - 水平滚动

c# - TypeDescriptor 属性检索不一致

c# - 如何使用 Autofac 注册开放通用接口(interface)的所有实现

c# - WPF、C#、SQL - 在数据库中创建行

c# - 将可点击的超链接添加到没有新段落的 RichTextBox

c# - ReSharper“无法解析符号”,即使在项目构建时

c# - 按日期获取Exchange EWS托管API 2.0

c# - 只有标题数据的 WPF Datagrid 水平滚动