也许,这对你来说很容易,但我正在努力开发一个项目(出于教育目的),该项目使用 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)