请求的行为:我希望听到提议的通用解决方案,用于暂停调用线程,直到在Stream/SerialPort上接收到特定缓冲区为止。目前,我不关心超时等,但我需要强大的东西。WaitFor() - 如何等待Steam/SerialPort上的特定缓冲区到达?
尝试的方法:
Class myClass
{
private SerialPort _port; //Assume configured and connected.
public void WaitFor(byte[] buffer)
{
int bufferLength = buffer.Length;
byte[] comparisonBuffer = new byte[bufferLength];
while(true)
{
if(_port.BytesToRead >= bufferLength)
{
_port.Read(comparisonBuffer, 0, bufferLength);
if (comparisonBuffer.SequenceEqual(buffer)) { return; }
}
}
}
{
我有一个合理的成功量与此但它只是有一个“哈克”的感觉。它经常给我带来麻烦。我相信这是由于我无法保证在预期的数据包之前或之后没有收到其他数据,所以自然这种方法最终可能会读出流不同步。在这种情况下,我不想丢失前导/尾随数据,但该方法应该释放线程。
我需要在程序上实现,所以事件驱动的方法对我来说不会真正起作用。在通用意义上,我希望能够实现为;
Do thing;
WaitFor(mybuffer);
Do other thing;
@Sir Rufo 想法先生?非常感谢。 –
此方法只等待一个字节,而不是整个序列。恕我直言,不回答你的问题。如果你想要一个代码审查,你应该问http://codereview.stackexchange.com/ –
道歉,错过了我的while循环。啊,不知道codereview,谢谢你的提示。祝你有个好的一天。 –