4

私はシリアルポートから読み取るためにこの方法を使用しています:

public static void Main()
{
    SerialPort mySerialPort = new SerialPort("COM1");

    mySerialPort.BaudRate = 9600;
    mySerialPort.Parity = Parity.None;
    mySerialPort.StopBits = StopBits.One;
    mySerialPort.DataBits = 8;
    mySerialPort.Handshake = Handshake.None;

    mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

    mySerialPort.Open();

    Console.WriteLine("Press any key to continue...");
    Console.WriteLine();
    Console.ReadKey();
    mySerialPort.Close();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    Debug.Print("Data Received:");
    Debug.Print(indata);
}

私たちが知っているように、この種の API は Event-based Asynchronous Pattern (EAP) と呼ばれます。Async Await メソッドを使用して上記のコードを書きたいと思います。

PS:上記のコードを使用すると、間違ったデータが取得されることがあります
よろしくお願いします

4

1 に答える 1

14

SerialPort.BaseStream からデータを読み取ることもできます。これは Stream 型であるため、待機可能な ReadAsync() メソッドをサポートします。それを文字列に変換するのはあなた次第です。適切なエンコーディングを使用してください。SerialPort のデフォルトは ASCIIEncoding です。

于 2013-09-15T18:23:26.677 に答える