2011-03-24 74 views
1

progressBar偶尔会停止更新(以及GUI的其余部分),并且缺少矩形部分。 这只能在目标windows-ce 5.0平板设备上间歇性地看到,从来没有在Windows 7上看到。 progressBar.Refresh()改变progressBar.Maximum后没有帮助。 导致它的确切顺序是未知的,我无法在目标设备上运行调试器(我使用PC平台调试应用程序,但在PC上运行应用程序时从未发现过此问题)。 什么可能导致此? 进度条及其关联的标签以这种方式更新。什么可能会损坏winforms progressBar?

progressBar.Value = Status.value; 
label.Text = Status.value; 

label.Text总是正确的。

+1

从后台更新线程无需调用? – 2011-03-24 13:38:04

+0

我使用Timer = System.Windows.Forms.Timer来更新progressBar和所有其他GUI组件。 – jacknad 2011-03-24 13:42:11

+0

应用程序仍在相互作用?也许资源消耗使它挂起?尝试玩线程优先。 – 2011-03-24 13:43:56

回答

0

根本原因是对gui线程之外的gui进行更改。实际的解决方案是对System.Windows.Forms.Timer中的进度条进行所有更改。

1

你可以回波数据到一个Label控件,特别是像

debugLabel.Text = progressBar1.Value; 

这将帮助你找到什么进度条的值没有显示出来,如果它是一贯的相同值或随机值。

随机值会让我觉得GUI太忙而无法脱身。

相同的值会让我觉得设备上的坏像素。

您是否有更多数据提供?

+0

我刚刚添加了一个片段,显示了进度条及其关联标签的更新方式。 – jacknad 2011-03-24 14:26:22

+0

我猜'Status.Value'是一个'Integer'类型。如果它是一个小数值('float','double'等),那么您将丢失数据到'int'。 – jp2code 2011-03-24 17:19:17

+0

是的。 Status.Value是一个整数类型。 – jacknad 2011-03-25 13:44:04

0

听起来像UI线程没有得到足够的量子来完全绘制它需要的一切。设置其值和标签文本更新后,尝试调用Application.DoEvents

+0

克里斯!自从我使用Outlook Express在Microsoft板上发布信息后,我还没有收到您的消息。 – jp2code 2011-03-24 17:20:50