流阅读器-从IP读取数据



我正在连接一个通过IP发送数据的仪器。我想把我的阅读代码在一个计时器读取数据在后台,而用户与程序交互。我的问题是,它似乎流阅读器读行块。这是真的吗?如果是这样,我应该如何从输入设备读取一行而不阻塞?

我还应该注意到我的流阅读器是一个网络流。目标框架是。Net 2.0。我不确定这是否重要。

TIA,约翰。

StreamReader.ReadLine是一个阻塞(同步)方法。当您调用它时,它将阻止继续执行,直到接收到完整的行。这使得它更容易使用,但显然,如果您需要它异步工作,它就不能满足您的需求。

StreamReader包含许多方法的阻塞和异步版本。例如,除了ReadLine方法之外,还有一个ReadLineAsync方法,它与ReadLine做同样的事情,但它是异步完成的。

所以,你的选择是,要么你需要使用异步方法之一,或者你可以继续使用ReadLine方法,即使它是一个阻塞方法,只要你从另一个线程调用它。如果它阻塞了一个后台线程,它的唯一目的是读取流,这对你来说并不重要,只要UI线程没有被阻塞。例如,你可以有这样一个方法:

Private Sub MonitorStream
    While True
        ProcessLine(_Reader.ReadLine)
    End While
End Sub
然后,你可以在一个新线程中调用这个方法,像这样:
Dim t As New Thread(AddressOf MonitorStream)
t.Start()

这只是一个简单的例子。您可能想要检查流是否打开,而不仅仅是无限循环,等等。但这应该给你一个起点。我想说使用ReadLineAsync方法可能更可取,但对于知道异步编程的人来说,单独线程中的无限循环更容易使用和理解。

最新更新