要求された動作: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 思考?どうもありがとう。 –
このメソッドは、シーケンス全体ではなく1バイトだけ待機します。 IMHOはあなたの質問に答えません。コードレビューをしたい場合はhttp://codereview.stackexchange.com/ –
謝罪のために私のwhileループをオフにしてください。ああ、codereviewについて知りませんでした、チップのおかげで。良いものを持っている。 –