function  MyThreadFunc(P:pointer):Longint;stdcall;  
 
var  
   page,allpage,i,j,n:integer;  
   username:string;  
   ifhave:boolean;  
begin  
 
form1.NMHTTP1.Get(form1.Edit1.Text);  
form1.Memo1.Lines.Text:=form1.NMHTTP1.Body;  
 
 
     for  i:=0  to  form1.Memo1.Lines.Count-1  do  
     begin  
         form1.Memo2.Lines.Add(form1.Memo1.Lines.Strings[i])  
     end;  
 
end;  
 
 
procedure  TForm1.Button1Click(Sender:  TObject);  
begin  
 
   hthread:=CreateThread(nil,0,@MyThreadFunc,nil,0,ThreadID);  
   if  hThread=0  then  
         messagebox(Handle,'Didn’t  Create  a  Thread',nil,MB_OK);  
 
           
end;  
 
当我关闭窗口时出现出现“无效的窗口句柄”的错误,应该怎样解决呢?是不是要先结束线程呢?  
我有试过在关闭窗口前调用:  
 
form1.NMHTTP1.Abort;  
GetExitCodeThread(hthread,lpexitcode);  
TerminateThread(hthread,lpexitcode);  
 
但关闭窗口后,还是出现以上错误~~~大家知道怎样解决吗?或者可以提供能够在线程中实现以下代码的运行吗?  
 
var  
   page,allpage,i,j,n:integer;  
   username:string;  
   ifhave:boolean;  
begin  
 
form1.NMHTTP1.Get(form1.Edit1.Text);  
form1.Memo1.Lines.Text:=form1.NMHTTP1.Body;  
     for  i:=0  to  form1.Memo1.Lines.Count-1  do  
     begin  
         form1.Memo2.Lines.Add(form1.Memo1.Lines.Strings[i])  
     end;  
 
end;  

解决方案 »

  1.   

    應該是關閉 thread後 再關閉窗口的。。
    因為呢thread中 都用到了窗口中的咚咚。。TerminateThread 需要看返回值。。
    還有一般不要用TerminateThread 這個函數具體錯誤是什麼??
      

  2.   

    退出时调用form1.NMHTTP1.Active:=False
      

  3.   

    同意 beyondtkl(大龙驹<學,無涯>) 
    记着结束线程和释放线程,
      

  4.   

    可能是你的线程与VCL通信是不同步
    把与Vcl通信的方法放在Synchronize()中
      

  5.   

    http://search.csdn.net/Expert/topic/2596/2596451.xml?temp=.999386