德尔福 - 同步线程与框架 [英] Delphi - Synchronize Thread with Frame

查看:107
本文介绍了德尔福 - 同步线程与框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下午好:-),
我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆