我的 Delphi 2009 应用程序(还未完全完成)出现了 Application.ProcessMessages 卡顿的问题。 我的应用程序有一个 TTimer 对象,每 100 毫秒触发一次以轮询外部设备。 当某些东西改变时,我使用 Application.ProcessMessages 来更新屏幕,以使应用程序仍然具有响应性。
其中之一在网格 OnMouseDown 事件中。 在那里,它有一个 Application.ProcessMessages,实际上被卡住了。 移除它没有问题,但我很快发现另一个阻塞了的 Application.ProcessMessages。
我认为我遇到的问题可能是在当前调试模式下,TTimer 花费的时间太长了。 我已经防止了 TTimer.OnTimer 事件处理程序重新进入相同的代码(见下文):
procedure TfrmMeas.tmrCheckTimer(Sender: TObject);
begin
if m_CheckTimerBusy then
exit;
m_CheckTimerBusy:=true;
try
PollForAndShowMeasurements;
finally
m_CheckTimerBusy:=false;
end;
end;
在哪些地方调用Application.ProcessMessages会是不好的实践呢?我想到了OnPaint例程,这样做是没有意义的。
有什么一般性的建议吗?
我很惊讶在开发的这个阶段出现了这种问题!