public static ManualResetEvent allDone = new ManualResetEvent(false);
在读取端口的语句前加上allDone.waitone()阻塞此线程,并通知其他线程继续执行
在数据到达并放到缓存里以后调用allDone.set()通知刚才被阻塞的线程继续执行,也就是读取缓存里边的值就行,如果要循环读取,只要放在while里就行了。最好不要用sleep,否则会睡过头~
建议看看MSDN里关于异步socket编程的文章
在读取端口的语句前加上allDone.waitone()阻塞此线程,并通知其他线程继续执行
在数据到达并放到缓存里以后调用allDone.set()通知刚才被阻塞的线程继续执行,也就是读取缓存里边的值就行,如果要循环读取,只要放在while里就行了。最好不要用sleep,否则会睡过头~
建议看看MSDN里关于异步socket编程的文章
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();则程序一直等待接受数据;
}
{
while(!端口.dataAvailalble())
{
Thread.sleep(100);
}
autoreset.set();
//在这里加上这么一句试试
Thread.Sleep(1);
输出到屏幕(“获得了数据!”);
}