我已经从(TShape )中创建了一个新组件,并在下面创建了一个Timer属性::
property Timer:TTimer read FDeviceTimer write SetDeviceTimer ;这个计时器的目的是通过使用下一个过程来改变设计时的组件高度:
procedure TFireDeviceWTimer.OnTimerRepaint(Sender: TObject);
begin
//==================
if ChangDim then begin
Height:=Height+10;
//Repaint;
Sleep(FDeviceTimer.Interval);
ChangDim:=False;
end
else begin
Height:=Height-10;
//Repaint;
Sleep(FDeviceTimer.Interval);
ChangDim:=true;
end;
end;它运行良好,但我在运行时使用它后注意到的问题是,它使应用程序太慢.
有谁能解释一下这一问题的原因和解决办法吗?
谢谢你。
发布于 2021-02-17 04:13:30
原因: TTimer在主应用程序的同一线程中工作。
解决方案:创建一个线程,直到主组件被销毁为止,而不是计时器。
为此,您可以在组件的构造函数中添加如下所示的内容
FPaintThread := CreateAnonymouseThread(procedure
begin
while assigned(Self) and (not Application.Terminated) do
begin
RepainInstruction;
Sleep(100);
end;
end);
FPaintThread.Start;但是,请记住使用TThread.Synchronize与主线程对象交互,以防止bug。
https://stackoverflow.com/questions/66203795
复制相似问题