首先待传的文件是由listview(vsReport)列表显示可选择多个 然后线程上传选中文件 procedure TfrmMirrorSend.UpLoadItem(lvItem: TListItem);var ftpwork:ftpThd;
begin
ftpwork:=ftpThd.Create(lvItem.SubItems[0],lvItem.Caption);
end;
线程单元:
unit FtpPut;interfaceuses
Classes,UMirrorSend,dialogs,SysUtils,idftp;type
ftpThd = class(TThread)
private
{ Private declarations }
CreateFileName:String;//上传文件 stream
ProName:String;//上传文件名称
protected
procedure Execute; override;
public
constructor Create(StreamFile:String;FilesName:String);
procedure putfile;
end;implementationuses Math;constructor ftpThd.Create(StreamFile:String;FilesName:String);
begin
CreateFileName :=StreamFile ;
ProName :=FilesName ; FreeOnTerminate := True;
inherited Create(False);
end;procedure ftpThd.Execute;
var
fstream: TFileStream ;
//ftp1:TIdFTP;
begin
try
fstream := TFileStream.Create(CreateFileName,fmOpenRead);
except
//ShowMessage('读取文件出错');
Abort;
end;try
{ftp1:=TIdFTP.Create(nil);
with ftp1 do
begin
Host :='124.0.0.188';
Port :=23;
Username :='system';
Password :='system';
Connect();
end;} //ftp1.put(fstream,ProName ,False );
frmmirrorsend.idftp1.put(fstream,ProName ,False ); ////报内存错误 Synchronize(putfile );
finally
fstream.Free;
Terminate ;end;
{ Place thread code here }
end;procedure ftpThd.putfile;
begin //frmMirrorSend.ggFileSend.Progress :=0; //报内存错误
ShowMessage('上传完毕111!');
//frmMirrorSend.lvFileList.Items[2].Caption := '已发送';//报内存错误
{ Place thread code here }
end;end.小弟刚接触多线程 请问如何在线程里访问窗体里控件
上述错误如何改正呢 ? 见代码里的注释 如果在线程里创建idftp上传就不报错为什么?
begin
ftpwork:=ftpThd.Create(lvItem.SubItems[0],lvItem.Caption);
end;
线程单元:
unit FtpPut;interfaceuses
Classes,UMirrorSend,dialogs,SysUtils,idftp;type
ftpThd = class(TThread)
private
{ Private declarations }
CreateFileName:String;//上传文件 stream
ProName:String;//上传文件名称
protected
procedure Execute; override;
public
constructor Create(StreamFile:String;FilesName:String);
procedure putfile;
end;implementationuses Math;constructor ftpThd.Create(StreamFile:String;FilesName:String);
begin
CreateFileName :=StreamFile ;
ProName :=FilesName ; FreeOnTerminate := True;
inherited Create(False);
end;procedure ftpThd.Execute;
var
fstream: TFileStream ;
//ftp1:TIdFTP;
begin
try
fstream := TFileStream.Create(CreateFileName,fmOpenRead);
except
//ShowMessage('读取文件出错');
Abort;
end;try
{ftp1:=TIdFTP.Create(nil);
with ftp1 do
begin
Host :='124.0.0.188';
Port :=23;
Username :='system';
Password :='system';
Connect();
end;} //ftp1.put(fstream,ProName ,False );
frmmirrorsend.idftp1.put(fstream,ProName ,False ); ////报内存错误 Synchronize(putfile );
finally
fstream.Free;
Terminate ;end;
{ Place thread code here }
end;procedure ftpThd.putfile;
begin //frmMirrorSend.ggFileSend.Progress :=0; //报内存错误
ShowMessage('上传完毕111!');
//frmMirrorSend.lvFileList.Items[2].Caption := '已发送';//报内存错误
{ Place thread code here }
end;end.小弟刚接触多线程 请问如何在线程里访问窗体里控件
上述错误如何改正呢 ? 见代码里的注释 如果在线程里创建idftp上传就不报错为什么?
同步了也不行 究竟是什么可能原因呢 ?