退出永远接收数据的线程

时间:2014-03-11 19:21:51

标签: c# multithreading

我试图弄清楚如何正确退出这个帖子,因为它导致了一个荒谬的心痛,并且调用Thread.Abort()并不是这样做的。

    while(isRunning) {
        Debug.Log ("Running");
        while((messageFromServer = DataIN.ReadLine ()) != null) {
            Debug.Log ("Message from server: " + messageFromServer);
            HandlePacket(messageFromServer);
        }
    }

问题是,线程一直在等待数据从服务器进来,如果那里没有任何数据,它就不会跳过它。这是我试图用while()循环完成的。

我需要设置它,以便在没有任何数据要处理的情况下,它完成线程并再次执行,而不是等待数据处理,处理它,然后结束线程。

我该如何有效地做到这一点?

编辑:对于那些可能会问的人,DataIN是一个StreamReader,而messageFromServer是一个字符串。

1 个答案:

答案 0 :(得分:0)

只需从传递给线程创建的委托中返回就可以退出线程。

在这种情况下,一旦服务器完成发送数据,线程就会退出。您可以向基础流添加超时,以防止"挂起"如果服务器没有足够快地响应,即:

DataIN.BaseStream.ReadTimeout = 2000; // 2 second timeout
while((messageFromServer = DataIN.ReadLine()) != null) {

请注意,当超时发生时,这可能会引发IOExeception,这可能是您想要处理的。