【发布时间】:2009-07-17 09:27:01
【问题描述】:
我这里有一个旧版应用程序,它有一些“耗时”的循环,由于各种用户交互而被触发。耗时的代码会定期使用进度信息(通常是标签)更新屏幕上的某些内容,然后,似乎是为了说服视觉刷新在那里发生,然后代码调用 Application.ProcessMessages(啊!)。
我们现在都知道这会给 GUI 应用程序带来什么样的麻烦(因为是慈善的,那是一个更纯真的时代),我们发现这就像鸡蛋一样,不时让用户实现程序是不可能的,因为他们在程序“忙”时点击控件。
在不处理其他事件/消息等的情况下定期刷新表单的视觉效果的最佳方式是什么?
我的想法是;
- 在执行任何耗时的操作之前禁用所有控件,并保留“...ProcessMessages”调用以“强制”刷新,或
- 找到另一种定期刷新控件的方法
我可以做前者,但这让我想知道 - 有没有更好的解决方案?
旧版示例代码;
我:=0; 而 FJobToBeDone 做 开始 DoStepOfLoop; 公司(一); 如果我 mod 100 = 0 那么 开始 更新标签等; Application.ProcessMessages; 结尾; 结尾;我已经能听到你们在后面昏倒了。 :-)
【问题讨论】:
标签: delphi