主题说明了一切。我实际上将标签用作伪进度条,因此它具有纯蓝色背景颜色,没有文本,并且我在每个计时器刻度上增加其宽度。除了一个奇怪的案例外,这种方法很有效:
如果我整天离开窗户,那很好。
如果我最小化不到一分钟并恢复,那很好。
只有当我最小化超过一分钟(足够长时间才能实际打开)时,然后恢复窗口,标签不会重新绘制。也就是说,当我恢复窗口时,在刻度期间没有动态更新的其他标签会显示,但是动态更新的特殊标签不会被重新绘制(我希望是蓝色的像素是窗口的背景颜色,非常浅灰色)。是的,如果恢复的窗口位于下一个刻度线,则标签会以预期的方式重新绘制蓝色。窗口没有锁定 - 它响应输入。我正在使用Windows.Forms.Timer拖到窗体上,而不是代码中的System.Timers.Timer。
那么,用户错误还是OS / .NET框架错误?
编辑1:根据下面的答案1,尝试读取另一个标签的宽度会触发问题。为什么窗口的最小化状态会影响读取标签的宽度?
答案 0 :(得分:0)
我已将它隔离到这一行代码,这是我的tick事件调用的子代码:
fakebar.Width = Int((spanSoFar / spanOverall) * (fakeborder.Width - 2))
令人费解的是,省略了对fakeborder对象的读取(一个没有动态更新的标签)解决了这个问题:
fakebar.Width = Int((spanSoFar / spanOverall) * (366))
这似乎不像是用户错误,但可能会发生一些事情,我不知道。