我试图弄清楚如何正确退出这个帖子,因为它导致了一个荒谬的心痛,并且调用Thread.Abort()并不是这样做的。
while(isRunning) {
Debug.Log ("Running");
while((messageFromServer = DataIN.ReadLine ()) != null) {
Debug.Log ("Message from server: " + messageFromServer);
HandlePacket(messageFromServer);
}
}
问题是,线程一直在等待数据从服务器进来,如果那里没有任何数据,它就不会跳过它。这是我试图用while()循环完成的。
我需要设置它,以便在没有任何数据要处理的情况下,它完成线程并再次执行,而不是等待数据处理,处理它,然后结束线程。
我该如何有效地做到这一点?
编辑:对于那些可能会问的人,DataIN是一个StreamReader,而messageFromServer是一个字符串。
答案 0 :(得分:0)
只需从传递给线程创建的委托中返回就可以退出线程。
在这种情况下,一旦服务器完成发送数据,线程就会退出。您可以向基础流添加超时,以防止"挂起"如果服务器没有足够快地响应,即:
DataIN.BaseStream.ReadTimeout = 2000; // 2 second timeout
while((messageFromServer = DataIN.ReadLine()) != null) {
请注意,当超时发生时,这可能会引发IOExeception
,这可能是您想要处理的。