新手提问:关于将IndyFTP放入线程中执行的问题?帮忙!!!(100分)

  • 主题发起人 主题发起人 336764
  • 开始时间 开始时间
3

336764

Unregistered / Unconfirmed
GUEST, unregistred user!
找了一晚上有关线程的东西,还是没搞懂。

unit c1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdFTP, ComCtrls, StdCtrls, Buttons;
type
Th = class(TThread)
private
IdFTP: TIdFTP;
OpenDialog: TOpenDialog;
//线程里能使用opendialog吗?
procedure Upload;
{ Private declarations }
protected
procedure Execute;
override;
public
constructor Create(isRun:Boolean);
end;


type
Tc1_form = class(TForm)
ProgressBar1: TProgressBar;
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
c1_form: Tc1_form;
TTh : TThread;
implementation
{$R *.dfm}
constructor Th.Create(isRun:Boolean);
begin
IdFTP := IdFTP.Create;
inherited Create(isRun);
end;

procedure Th.Upload;
begin
IdFTP.Host := 'localhost';
IdFTP.Username := 'upload';
IdFTP.Password := 'upload';
IdFTP.Connect;
showmessage('已经通过线程连接了数据库。');
//这里是打开选择文件的窗口,然后选择一个文件就put上去...
end;

procedure Th.Execute;
begin
{ Place thread code here }
Upload;
end;

procedure Tc1_form.Button1Click(Sender: TObject);
begin
TTh := Th.Create(true);
//这里要怎么写能执行该线程?
end;
end.

为何我一运行就说TIdFTP class 不存在??????
我对线程一点儿不了解,找了半天资料才找到一点点初级的,完全没概念
程序目的:
把IdFTP放入单独的线程运行,从而不影响主线程的界面。
另外,希望有朋友发个最为简单的线程的代码学习一下。
比如 按一个按钮,然后在5个线程中计算5个公式的结果等这么简单的。。。
谢谢。。。
 
本代码的原问题是在
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=3343573
是因为阻塞模式的问题所以想放入线程执行。。。
 
另外的问题就是, 我还是没搞懂,主线程中如何运行子线程。。。。
 
[blue]希望能有人帮忙解答。问题应该不难啊。现在写程序哪有不用线程的?:([/blue]
 
问题已解决:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=3344115
封贴。
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
unit Unit2;
interface
uses
Classes, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdFTP, DateUtils, sysutils,windows;
type
TSendFileThread = class(TThread)
private
{ Private declarations }
protected
filename: String;
procedure Execute;
override;
public
constructor Create(number:integer);
end;

implementation
uses Unit1;
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TSendFileThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end;
}
{ TSendFileThread }
constructor TSendFileThread.Create(number: integer);
begin
filename:=inttostr(number)+'.txt';
inherited Create(False);
end;

procedure TSendFileThread.Execute;
var
IdFtpTemp: TIdFtp;
sl: TStringList;
begin
{ Place thread code here }
// sl := TStringList.Create;
// sl.Add(DateTimeToStr(Now));
// sl.SaveToFile(filename);
// sl.Clear;
// Freeandnil(sl);
idftptemp := Tidftp.Create;
idftptemp.Username := 'anonymous';
idftptemp.Host := '127.0.0.1';
idftptemp.Connect;
idftptemp.Login;
idftptemp.Put('mirserver.rar',filename);
idftptemp.Disconnect;
idftptemp.Free;
end;

end.

我做测试用的没别的目的就是试多线程,对你应该有帮助,程序也许不需要在线程里面打对话框,别的方法很多。要学会把问题简单化,编程不是复杂就能说明你水平高,关键是简单实用。
 
接受答案了.
 
后退
顶部