gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:46:07 24 4
gpt4 key购买 nike

好的,所以我在摆弄 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com