public static ManualResetEvent allDone = new ManualResetEvent(false);
在读取端口的语句前加上allDone.waitone()阻塞此线程,并通知其他线程继续执行
在数据到达并放到缓存里以后调用allDone.set()通知刚才被阻塞的线程继续执行,也就是读取缓存里边的值就行,如果要循环读取,只要放在while里就行了。最好不要用sleep,否则会睡过头~
建议看看MSDN里关于异步socket编程的文章

解决方案 »

  1.   

    题目没说清楚:
    class A
    {
      public Thread loopread=new Thread(new Thread.start(readContent));
      init(看看能不能启动loopread.start());
      public Autoresetevent autoreset=new Autoresetevent (false);  public void readContent()
      {
         while(!端口.dataAvailalble())
         {
             Thread.sleep(100);
         }
         autoreset.set();
         输出到屏幕(“获得了数据!”);
      }  public void 命令()
     {
         给socket端口发送了一个命令;//server段此时肯定会回复
         如果调用:Thread.sleep(500);屏幕输出 “获得了数据”;
         而调用:autoreset.waitone();则程序一直等待接受数据; 
    }
      

  2.   

    这样试下:public void readContent()
      {
         while(!端口.dataAvailalble())
         {
             Thread.sleep(100);
         }
         autoreset.set();
         //在这里加上这么一句试试
       Thread.Sleep(1);
         输出到屏幕(“获得了数据!”);
      }