为什么这些代码不能写入线程? ( 积分: 50 )

  • 主题发起人 主题发起人 kytcw
  • 开始时间 开始时间
K

kytcw

Unregistered / Unconfirmed
GUEST, unregistred user!
50分不够,我再加100分!急啊!请大家帮下忙
var
name:String;
password:string;
GetURL :String;
PostURL :String;
GetHtml :String;
sParams :String;
aParams :TStrings;
aStream :TStringStream;
begin
time := 0;
label8.Caption := '';
if edit1.Text = '' then
begin
label8.Visible := true;
label8.Caption := '请输入您的用户名!';
exit;//跳出
end;
if edit2.Text = '' then
begin
label8.Visible := true;
label8.Caption := '请输入您的登陆密码!';
exit;//跳出
end;
button1.Enabled := false;
timer1.Enabled := true;//打开时间控件记时,开始
edit1.Enabled := false;//禁用用户名输入框
edit2.Enabled := false;//禁用登陆密码输入框
check.Enabled := false;//禁用使用代理服务器选项
IdHTTP1 := TIdHTTP.Create(nil);
aParams := TStringList.Create;
aStream := TStringStream.Create('');
edit3.Text := '';
name:=edit1.Text ;
password:=edit2.Text ;
if check.Checked then
begin
idhttp1.ProxyParams.ProxyServer :=ip.Text ;
idhttp1.ProxyParams.ProxyPort :=StrToInt(port.text);
idhttp1.ProxyParams.ProxyUsername:=zh.Text ;
idhttp1.ProxyParams.ProxyPassword:=mm.Text ;

end
else
begin
idhttp1.ProxyParams.ProxyServer :='';
idhttp1.ProxyParams.ProxyPort :=0;
idhttp1.ProxyParams.ProxyUsername:='';
idhttp1.ProxyParams.ProxyPassword:='';
end;

try
aParams.Clear;
aParams.Add(sParams);
GetHtml := IdHTTP1.Get(GetURL);
{取登录页面}
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
IdHTTP1.Post(PostURL, aParams, aStream);
{提交}
Edit3.Text := aStream.DataString;
finally
IdHTTP1.Free;
aParams.Free;
aStream.Free;
end;

为什么 IdHTTP1 := TIdHTTP.Create(nil);
这一段不能写入线程?写进去就出错.
还有这一段 idhttp1.ProxyParams.ProxyPort := StrToInt(port.text);也会出错!难道在线程序里不能用strtoint吗?
有那位高手告诉我一下用什么方法才行~或帮忙把上面代码改为可以正常执行的线程代码.谢谢了!在线等!!!!
 
50分不够,我再加100分!急啊!请大家帮下忙
var
name:String;
password:string;
GetURL :String;
PostURL :String;
GetHtml :String;
sParams :String;
aParams :TStrings;
aStream :TStringStream;
begin
time := 0;
label8.Caption := '';
if edit1.Text = '' then
begin
label8.Visible := true;
label8.Caption := '请输入您的用户名!';
exit;//跳出
end;
if edit2.Text = '' then
begin
label8.Visible := true;
label8.Caption := '请输入您的登陆密码!';
exit;//跳出
end;
button1.Enabled := false;
timer1.Enabled := true;//打开时间控件记时,开始
edit1.Enabled := false;//禁用用户名输入框
edit2.Enabled := false;//禁用登陆密码输入框
check.Enabled := false;//禁用使用代理服务器选项
IdHTTP1 := TIdHTTP.Create(nil);
aParams := TStringList.Create;
aStream := TStringStream.Create('');
edit3.Text := '';
name:=edit1.Text ;
password:=edit2.Text ;
if check.Checked then
begin
idhttp1.ProxyParams.ProxyServer :=ip.Text ;
idhttp1.ProxyParams.ProxyPort :=StrToInt(port.text);
idhttp1.ProxyParams.ProxyUsername:=zh.Text ;
idhttp1.ProxyParams.ProxyPassword:=mm.Text ;

end
else
begin
idhttp1.ProxyParams.ProxyServer :='';
idhttp1.ProxyParams.ProxyPort :=0;
idhttp1.ProxyParams.ProxyUsername:='';
idhttp1.ProxyParams.ProxyPassword:='';
end;

try
aParams.Clear;
aParams.Add(sParams);
GetHtml := IdHTTP1.Get(GetURL);
{取登录页面}
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
IdHTTP1.Post(PostURL, aParams, aStream);
{提交}
Edit3.Text := aStream.DataString;
finally
IdHTTP1.Free;
aParams.Free;
aStream.Free;
end;

为什么 IdHTTP1 := TIdHTTP.Create(nil);
这一段不能写入线程?写进去就出错.
还有这一段 idhttp1.ProxyParams.ProxyPort := StrToInt(port.text);也会出错!难道在线程序里不能用strtoint吗?
有那位高手告诉我一下用什么方法才行~或帮忙把上面代码改为可以正常执行的线程代码.谢谢了!在线等!!!!
 
strtoint函数不能用,是因为你的线程单元里没有引用他相应的单元,,你找找,[^]
 
你所给的代码是在同一个线程里呀,我不知里的TIDHTTP是什么控件。我以前用过一个HTTP控件使用多线程时是用它的异步方式,我的代码是在同一线程里,控件自己开新线程,交换数据是控件用事件完成。
 
说清楚你想实现什么功能?idhttp1??
 
我想实现的是用IdHTTP向某一ASP网页提交一数据,但是在提交过程中会造成程序的长时间无响应,我想用线程序运行这段代码,程序应该就不会有无响应的状态了.我第一次用线程不知道能不能实现?在线程里调用IdHTTP还会不会无响应?
引用其他单元是不是 uses Unit1;
???
 
你的IdHTTP1是不是线程内部变量啊,如果他是在主线程中的就不行,你要声明在线程的privated,protected,public中或是在线程的excute的var中声明
 
StrToInt出错是没有引用到windows单元,IdHTTP1 := TIdHTTP.Create(nil);
在线程里面不能创建
 
多人接受答案了。
 
后退
顶部