0

System.IO.Ports.SerialPortシリアル ポート通信に使用する .NET C# クラスがあります。シリアルポートをループで連続して読み取るスレッドが含まれています。

TimeoutException私は常に、通常のプログラム フローの一部として例外を使用するのは良くないと考えていましたが、Web を検索すると、次のように読み取りをブロックし、着信データを待機する例がたくさんあります。

while (true)
{
    try
    {
        serialPort.Read(buffer, offset, count);
        /* Processing code here */
    }
    catch (TimeoutException)
    { }
}

次の例のように、SerialPort.BytesToRead()を発行する前に確認したほうがよいでしょうか。Read

while (true)
{
    if (serialPort.BytesToRead() <= 0)
    {
        /* Wait for event signal or similar. */
    }

    serialPort.Read(buffer, offset, count);
    ProcessData();
}
4

2 に答える 2

1

2番目のアプローチは間違いなく優れています。通常のプログラムフローを制御するために例外を使用しないでください。

さらに、最初のアプローチは、特に、スローされたすべての例外でブレークするようにIDEを設定した場合、デバッグエクスペリエンスを実際に混乱させます。

于 2013-02-18T10:23:13.137 に答える
-1

ポートを読み取らないでください。特別な機能があります。

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
     int n = serialPort1.BytesToRead;
     ...
}
于 2015-10-18T13:54:53.930 に答える