我目前有一个应用程序,可以生成单个win表单的多个实例.表单的每个实例都有一个计时器,它以大约1刻度/秒的速率更新表单本身的一些控件和一些属性.一旦应用程序达到一定数量的表单,它就会停止绘制计时器滴答内发生的"更新".
我希望将UI线程保存在计时器的底部并允许表单重新绘制而不调用Application.DoEvents(我的理解是Application.DoEvents()处理整个应用程序中的所有待处理窗口消息(可能包括其他计时器的刻度) '? - 不确定)当我想要它处理的是现在已经更新了许多控件时重新绘制表单.
如果您只想让表单或特定控件重绘自己,只需在有问题的表单/控件上调用Control.Refresh即可.
话虽这么说,这通常(像Application.DoEvents)一个标志,重新设计是有序的.如果您有这样长时间运行的进程,那么将工作推送到BackgroundWorker会更好,这将使实际的计算工作在后台线程中运行,并防止UI变得无响应.
我不清楚你为什么要打电话DoEvents.为什么不让窗口重新贴合自己呢?它现在的行为方式有什么问题?
调用DoEvents 通常表示某些东西应该在后台线程中 - 在你的情况下,听起来它实际上可能只是你有太多的事件在继续.如果您的GUI非常复杂以至于无法在一秒钟内重绘,那听起来这可能是UI本身的设计问题.