1

我当前的代码

   Screen.Cursor := crSQLWait;
   ProgressDlg := TProgressDlg.Create(Application);
   try
      ProgressDlg.ProgressLabel.Caption := 'Loading data. Please wait...';
      ProgressDlg.Show;
      Application.ProcessMessages;
      if MainCDS.RemoteServer <> nil then
      begin
         MainCDS.Active := false;
         MainCDS.Active := true; 
      end;
   finally
      FreeAndNil(ProgressDlg);
      Screen.Cursor := crDefault;
   end;

如何在 MainCDS 打开时移动 ProgressDlg 上的选框进度条,因为现在 MainsCDS 打开时进度条被冻结。希望你能理解我的问题。

4

1 回答 1

1

您需要在不同的线程中运行数据库访问和进度对话框。这是唯一的选择,因为数据库访问代码是同步的,没有回调。好吧,我假设您的数据库层不提供可用于保持 UI 活动的常规回调。是这样吗?

如果您不能将数据库代码放在后台线程中,那么您就处于绑定状态。进度对话框的 GUI 代码希望位于主线程中。如果将其移至后台线程,则无法使用 VCL,因为它与主 GUI 线程相关联。因此,您可能需要求助于原始 Win32 API 调用。

于 2012-09-28T08:10:59.813 回答