我现在把线程里的数据通过事件传给主程序,在程序里的接收事件里调试是发现线程已成功把数据传出来了,
写到日志文件里也成功,但是不能显示到主程序的界面里,我试过在主程序里加一个定时器来改变一个数值然
后显示出来,这样试是成功的,说明界面没有被冻结,但在自定义事件里读到从线程里出来的数据却显示不了,
请问是什么原因呢?请大家指点一下.主要代码如下:
type
THttpBeginWorkNotify = procedure(sender: tobject; size: integer) of object; //在线程里自定义一个事件public
OnHttpWorkBegin: THttpBeginWorkNotify; //下载开始事件
end;//线程里定义下载控件及取下载数据的过程函数
idhttp.OnWorkBegin := HttpWorkBegin;
procedure TDownLoadThread.HttpWorkBegin(Sender: TObject; WorkMode: TWorkMode;
WorkCountMax: Integer);
begin
try
intCurAllSize := WorkCountMax; //取到当前文件的最大值
synchronize(DoHttpWorkBegin); //通过事件,把值传递出去
except end;
end;procedure TDownLoadThread.DoHttpWorkBegin;
begin
try
if assigned(OnHttpWork) then
OnHttpWorkBegin(self, intCurAllSize); //会转到主程序上的ComDownWork函数
except end;
end;在主程序里取从线程里传出来的数据:
procedure TfrmMain.DownWorkBegin(sender: tobject;size: integer);
var
i:integer;
begin
i:=size;
lable1.caption:=inttostr(i); //却没反应
end;
写到日志文件里也成功,但是不能显示到主程序的界面里,我试过在主程序里加一个定时器来改变一个数值然
后显示出来,这样试是成功的,说明界面没有被冻结,但在自定义事件里读到从线程里出来的数据却显示不了,
请问是什么原因呢?请大家指点一下.主要代码如下:
type
THttpBeginWorkNotify = procedure(sender: tobject; size: integer) of object; //在线程里自定义一个事件public
OnHttpWorkBegin: THttpBeginWorkNotify; //下载开始事件
end;//线程里定义下载控件及取下载数据的过程函数
idhttp.OnWorkBegin := HttpWorkBegin;
procedure TDownLoadThread.HttpWorkBegin(Sender: TObject; WorkMode: TWorkMode;
WorkCountMax: Integer);
begin
try
intCurAllSize := WorkCountMax; //取到当前文件的最大值
synchronize(DoHttpWorkBegin); //通过事件,把值传递出去
except end;
end;procedure TDownLoadThread.DoHttpWorkBegin;
begin
try
if assigned(OnHttpWork) then
OnHttpWorkBegin(self, intCurAllSize); //会转到主程序上的ComDownWork函数
except end;
end;在主程序里取从线程里传出来的数据:
procedure TfrmMain.DownWorkBegin(sender: tobject;size: integer);
var
i:integer;
begin
i:=size;
lable1.caption:=inttostr(i); //却没反应
end;
WorkCountMax: Integer);
begin
try
intCurAllSize := WorkCountMax; //取到当前文件的最大值
//在这加一句试下
FrmMain.lable1.caption:=inttostr(WorkCountMax); //显示数值 synchronize(DoHttpWorkBegin); //通过事件,把值传递出去
except end;
end;