如题
代码也帖出来..
procedure TForm1.tjTimer(Sender:TObject);
var
  str:TStringList;
begin
  str:=TStringList.Create;
  IdAntiFreeze1.OnlyWhenIdle:=False; //这里貌似没有起作用...程序还是会停止响应!
  try
    str.Clear;
    str.Text:=IdHTTP1.Get(S_ServerHttp+'tj.txt');
  except
    str.Text:='';
    IdHTTP1.Tag:=0;
  end;
  str.Free;
end;有谁遇到同样的问题了吗??
高手来来来 分不够可以加

解决方案 »

  1.   

    用的是什么版本的Delphi?
    据说有些版本的Delphi有问题,换个版本就好了……
      

  2.   

    放在主线程里好像会有短暂的停顿
    放在窗体上就行了,不用IdAntiFreeze1.OnlyWhenIdle:=False; 这段代码就行
    还是把数据请求写到线程里比较爽啊
      

  3.   

    用的IDNY10的
    delphi2007现在改版本是不很行得通哦.
      

  4.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
      IdHTTP, StdCtrls;type
      TDownLoadThread = class(TThread)
      public
        Idhtp: TIdHTTP;
        constructor Create(CreateSuspend: Boolean);
        destructor Destroy; 
      private
        procedure Execute; override;
      end;type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        // 声明线程对象
        DownLoadThread: TDownLoadThread ;
        procedure DlThreadTerminate(Sender: TObject);
      end;var
      Form1: TForm1;
      S_ServerHttp: string;  implementation{$R *.dfm}{ TDownLoadThread }constructor TDownLoadThread.Create(CreateSuspend: Boolean);
    begin
      inherited Create(CreateSuspend);
      Idhtp := TIdHTTP.Create(nil);
    end;destructor TDownLoadThread.Destroy;
    begin
      Idhtp.Free;
      inherited;
    end;// 线程执行过程
    procedure TDownLoadThread.Execute;
    var 
      str:TStringList;
    begin
      inherited;
      str:=TStringList.Create;
      try
        str.Clear; 
        str.Text:=Idhtp.Get('http://www.prize8.com');
        Form1.Memo1.Text := str.Text ;
    //    str.Text:=Idhtp.Get(S_ServerHttp+'tj.txt');
      except
        str.Text:=''; 
        Idhtp.Tag:=0;
      end;
      str.Free; 
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      // 创建线程,并挂起(暂不执行Execute里的内容)
      DownLoadThread := TDownLoadThread.Create(True);
      // 线程执行完自动销毁
      DownLoadThread.FreeOnTerminate := true;
      //
      DownLoadThread.OnTerminate := DlThreadTerminate;
      // 唤醒线程,开始执行Execute里的内容
      DownLoadThread.Resume ;
    end;procedure TForm1.DlThreadTerminate(Sender: TObject);
    begin
      // 线程执行完毕,主线程里需要响应的内容
      ShowMessage('线程执行完毕.');
    end;end.去看看多线程的东西吧,找几个文章多看几遍
      

  5.   

    线程代码 (bcb6)//---------------------------------------------------------------------------#include <vcl.h>
    #pragma hdrstop#include "Main.h"#pragma package(smart_init)//#define __DebugMODE
    __fastcall THTTPGetThr::THTTPGetThr(bool CreateSuspended)
            : TThread(CreateSuspended)
    {
      HTTPRF = new TIdHTTP(NULL);
    }
    //---------------------------------------------------------------------------
    void __fastcall THTTPGetThr::Execute()
    {
      try
      {
        HTTPRF->ConnectTimeout = 100000;
       // frmAutoRefresher->NILS->Selected = frmAutoRefresher->NILS->Items->Item[];
        HTTPRF->Get(Weblink);
     //  Sleep(1000);
     // Sleep(100);
        Successed = true;
      }
      catch(...)
      {
        Successed = false;
      }
      delete HTTPRF;
      this->Terminate();
    }
    //---------------------------------------------------------------------------
    创建线程 try
            {
              ThreadPointers[ThreadCount] = new THTTPGetThr(True);
              ThreadPointers[ThreadCount]->Weblink = tmpBack;
              ThreadPointers[ThreadCount]->OnTerminate = OnThreadEnd;
              if(CheckBox4->Checked == true)
              {
                try
                {
                  ThreadPointers[ThreadCount]->HTTPRF->ProxyParams->ProxyServer = pxyName;
                  ThreadPointers[ThreadCount]->HTTPRF->ProxyParams->ProxyPort = StrToInt(pxyPort);
                  ThreadPointers[ThreadCount]->HTTPRF->ProxyParams->ProxyUsername = "";
                  ThreadPointers[ThreadCount]->HTTPRF->ProxyParams->ProxyPassword = "";
                }
                catch(...)
                {
                }
              }
              ThreadPointers[ThreadCount]->ItemIDX = i;
            //  ThreadPointers[ThreadCount]->ItemIDX = ;
              ThreadPointers[ThreadCount]->Resume();
              ThreadCount++;          tmrStop->Enabled = False;   BitBtn6->Enabled = true;
      NILS->Items->Item[i]->Caption = tmpBack;
            }
            catch(...)
            {
            }
        }把idantifreeze放进主进程里!!!