Delphi7 自带的TCP通信例子,修改一下就出错,不知为何?
  Delphi7 demo 下的Net chat 程序,我想在新线程中传递一个新的Form给它,
线程运行时用Show显示这个窗口,但是运行时就死机了。  也就是:
     在TcpServer1的 OnAccept事件中,窗建一个Form,然后将其传递给子线程,
子线程在运行时就死了,    如果在线程中创建Form,调用Show显示,则没问题,这又是为什么呢?那位高手分析一下,很急!

解决方案 »

  1.   

    我在TcpServer1Accept(Sender: TObject;  ClientSocket: TCustomIpClient);
    var
      s: string;  DataThread: TClientDataThread;
    begin
      // create thread
      DataThread:= TClientDataThread.Create(true);
      // set the TagetList to the gui list that you
      // with to synch with.
      DataThread.TargetList := memRecv.lines;
      DataThread.form :=Tfmduihua.Create(nil);加了这个。
    procedure TClientDataThread.synchAddDataToControl;
    begin
     TargetList.AddStrings(ListBuffer);
    // form:=Tfmduihua.Create(nil);
     form.Show ; //死机了
    end;
      

  2.   

    子线程里不能直接访问、操作form及里面的控件
      

  3.   

    多谢楼上,那有什么解决方法呢? 我想做一个聊天程序,在收到消息后,子线程打开相应的Form 实现对话。
      

  4.   

    有个同步函数,用来包装访问、操作form及里面的控件的函数,才能在子线程里执行
      

  5.   

    问题可能是,在线程中尽量不要创建form,若要,则一定要放在Synchronize
    中, 而TCpserver 的 Onaccept 也是在一个线程中运行的,所以也不要在此线程中创建form
    ,把创建form的过程放到子线程的Synchronize()中
      

  6.   

    写一个方法xxoo,此方法内做你要做的事,然后在onAccept事件写上Synchronize(xxoo);