德尔福 - 同步线程与框架 [英] Delphi - Synchronize Thread with Frame
问题描述
我有一个Frame。这个框架我动态地由主窗体创建。
主窗体:
Interface:= TInterface.Create(self);
with handlingInterface do begin
Parent:= Form1;
Left:= 0;顶部:= 35;
宽度:= 570;身高:= 250;
end;
在框架中我有一个线程。我从框架调用这个线程。为什么我可以同步线程与框架?没有任何:
var
Form1:TForm1;
I strong>,我想更改 ProgressBar在框架中的位置。我不知道,为什么我可以在Synchronize方法的线程中访问ProgressBar。
如果是Form中的Thread和ProgressBar - 同步访问是Form1.ProgressBar .. 。
但是我在 Frame 中有Thread和ProgressBar。
示例线程类
unit Unit6;
接口
使用
类,ComCtrls;
类型
TProgressBarThread = class(TThread)
私有
{私有声明}
FProgressBar:TProgressBar;
过程MoveProgress;
保护
过程执行;覆盖;
public
过程SetProgressBar(ProgressBar:TProgressBar);
end;
实现
{ProgressBarThread}
过程TProgressBarThread.Execute;
begin
{在此处放置线程代码}
Synchronize(MoveProgress);
end;
过程TProgressBarThread.MoveProgress;
begin
FProgressBar.StepIt;
end;
过程TProgressBarThread.SetProgressBar(ProgressBar:TProgressBar);
begin
FProgressBar:= ProgressBar;
end;
结束。
使用像这样
var
PBT:TProgressBarThread;
begin
PBT:= TProgressBarThread.Create(True);
PBT.FreeOnTerminate:= True;
PBT.SetProgressBar(ProgressBar1);
PBT.Start;
// PBT.Resume;
end;
Good afternoon :-), I have one Frame. This Frame I dynamically created by Main Form.
Main form:
Interface := TInterface.Create(self);
with handlingInterface do begin
Parent := Form1;
Left := 0; Top := 35;
Width := 570; Height := 250;
end;
In Frame I have a Thread. I call this Thread from Frame. Why I can synchronize Thread with Frame? There isn't any:
var
Form1: TForm1;
I call Thread inside Frame and I want to change Position of ProgressBar in Frame. I don't know, why I can in Synchronize method of Thread access the ProgressBar.
If would be Thread and ProgressBar in Form - Synchronize access is Form1.ProgressBar ...
But I have Thread and ProgressBar in Frame.
You can give a reference to your progress bar to the thread.
Sample thread class.
unit Unit6;
interface
uses
Classes, ComCtrls;
type
TProgressBarThread = class(TThread)
private
{ Private declarations }
FProgressBar: TProgressBar;
procedure MoveProgress;
protected
procedure Execute; override;
public
procedure SetProgressBar(ProgressBar: TProgressBar);
end;
implementation
{ ProgressBarThread }
procedure TProgressBarThread.Execute;
begin
{ Place thread code here }
Synchronize(MoveProgress);
end;
procedure TProgressBarThread.MoveProgress;
begin
FProgressBar.StepIt;
end;
procedure TProgressBarThread.SetProgressBar(ProgressBar: TProgressBar);
begin
FProgressBar := ProgressBar;
end;
end.
Use like this
var
PBT: TProgressBarThread;
begin
PBT := TProgressBarThread.Create(True);
PBT.FreeOnTerminate := True;
PBT.SetProgressBar(ProgressBar1);
PBT.Start;
// PBT.Resume;
end;
这篇关于德尔福 - 同步线程与框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!