做客户端和服务端之间的通讯,我在做客户端的时候,想在发起连接的时候开启一个线程用于连接服务端,然后发起连接成功后,就开启线程来接收服务端的消息。我是这样做的:在一个连接的按钮下直接threadConnect.start(),然后下面紧接着是threadReceive.Start();然后我F5调试发现,程序没有执行threadConnect.start()线程,而是只执行了threadReceive.Start(),当然这样做肯定报错了,因为还没有和服务端连接起来。那么在开启两个线程的前提下,请问要怎么做呢?求大神帮忙。线程通讯

解决方案 »

  1.   

    连接成功之后再threadReceive.Start()不就行了嘛··
    你的连接是是异步的还是?
      

  2.   

    线程执行的顺序由系统调度,要自己控制线程执行的顺序,你需要使用Mutex之类的线程同步对象。
      

  3.   

    现在我暂时只开启一个线程,用到了NetWorkStream类。代码如下
    //申明
    NetWorkStream netWorkStream;
    BinaryReader br;
    连接成功后:
    netWorkStream=tcpClient.GetStream();
    br=new BinaryReader (netWorkStream);
    //在接收数据的地方:
    byte [] b=new byte[20];//这里写死了,数据定为20个长度
    b=br.ReadBytes(20);//读取数据
    这里可以读取到数据,但是郁闷的是,要是数据不是20怎么办,后面的就都是0,明显不合理啊。也就是说我要怎么读取到每次数据的长度呢?
      

  4.   


    b不需要初始化,br.ReadBytes返回的数组长度就是实际读到的数据的长度
      

  5.   

    应该在 Connect 线程里面,等到连接成功后,在开启 Recv 线程。
    否则,你需要同步这两个线程。
    它们虽然被先后准备开启,但是不保证按顺序开启。
      

  6.   

    线程同步控制,需要建立连接之后才能进行读取。
    可以把读取线程的start写在完成连接之后
    或者读取操作前判断下连接的connected属性
      

  7.   


    b不需要初始化,br.ReadBytes返回的数组长度就是实际读到的数据的长度
      

  8.   

    只是在threadReceive线程里加个判断怎么会卡呢
      

  9.   

    threadConnect.Wait();
    然后再
    threadReceive.Start();
      

  10.   

    明明要同步做的事情,为什么要分开用两个线程来做。
    你可以connect.Join();这样这个线程执行结束之后,才会执行后面的代码。但用两个线程的意义何在?
      

  11.   


    在你的Connect处理方法内部才调用 threadReceive.Start()。而不是提前调用。
      

  12.   

    你可以根据条件,让B线程挂起,等条件OK了,让A线程唤醒B线程。