gpt4 book ai didi

delphi - 带有线程的“正在工作,请稍候”屏幕?

转载 作者:行者123 更新时间:2023-12-03 15:18:54 24 4
gpt4 key购买 nike

也许,这对你来说很容易,但我正在努力开发一个项目(出于教育目的),该项目使用 TADSISearch 组件查询 adsi,持续了几天。当 TADSISearch 搜索 Active Directory 时,我试图在 Form2 上显示“正在工作,请稍候...”闪屏,其中包含一个男工动画 gif。虽然我根据自己的想法尝试了所有的可能性,但我没有成功。我尝试在线程中使用 TADSISearch,但线程在 ADSIsearch 完成之前终止。我认为 TADSISearch 不是线程安全的。你怎么认为?另外,我创建 Form2 并使用线程来更新它的另一种方式,但动画 gif 停止,而主窗体进行 adsi 搜索。对于这些你有什么想说的吗?我怎样才能在 ADSISearch 工作时制作一个请等待屏幕并保持主表单响应。 Application.ProcessMessages 或计时器也不是一种方法。非常感谢您的阅读和回答。

最佳答案

图形用户界面应由主线程更新。您应该将搜索代码放入单独的线程中,当搜索器线程工作时,您的主线程可以显示动画以及“请稍候”消息。

当通过任何可用的同步技术完成搜索时,您的搜索器线程可以通知主线程。最简单的方法是在线程类中定义一个方法来停止用户界面中的动画,并将该方法传递给搜索器线程的 Execute 方法末尾的 Synchronize。

您的搜索线程代码将如下所示:

type
TMyThread = class(TThread)
private
procedure NotifyEndOfThread;
protected
procedure Execute; override;
end;

implementation

uses MainFormUnit;

procedure TMyThread.NotifyEndOfThread;
begin
MainForm.ShowAnimation := False;
end;

procedure TMyThread.Execute;
begin
try
{Add your search code here}
finally
Synchronize(NotifyEndOfThread);
end;
end;

你的主线程的代码将是这样的:

TMainForm = class(TForm)
...
private
FShowAnimation : Boolean;
procedure SetShowAnimation(Value: Boolean);
public
property ShowAnimation : Boolean read FShowAnimation write SetShowAnimation;
end;

procedure TMainForm.SetShowAnimation(Value: Boolean);
begin
FShowAnimation := Value;
if FShowAnimation then
{Add animation code here}
else
{Stop animation}
end;

关于delphi - 带有线程的“正在工作,请稍候”屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2077930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com