应用程序.OnIdle继续执行



我试图处理一些事件时,我的应用程序是空闲的,所以我创建了这个代码

procedure TForm1.ApplicationEventIdle(Sender: TObject; var Done: Boolean);
begin
      Done := false;
      ShowMessage('Hello');
      Done := true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := ApplicationEventIdle;
end;

问题是消息框出现无限次,我怎么能只显示一次?

正是因为您显示了对话框,才会发生这种行为。为了关闭对话框,您必须单击OK按钮。这将在队列中放置一个输入消息。处理完之后,OnIdle事件触发。然后再次显示消息框。等等,等等。

你需要确保你不做任何需要用户输入的OnIdle处理程序。在您的情况下,尝试输出到日志而不是显示对话框,例如OutputDebugString。

在TForm1中创建一个私有布尔字段,以指示对话框何时显示,因此您不会再次显示它。

procedure TForm1.ApplicationEventIdle(Sender: TObject; var Done: Boolean);
begin
  if not FDialogShown then
  begin
    FDialogShown := True;
    ShowMessage('Hello');
  end;
end;

相关内容

  • 没有找到相关文章

最新更新