請求的行爲:我希望聽到提議的通用解決方案,用於暫停調用線程,直到在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,謝謝你的提示。祝你有個好的一天。 –