2016-07-28 18 views
0

私はSERIALPORTWindows 10のアプリケーションでserialPort.ReadExisting()と同等の機能はありますか?

var response = serialPort.ReadExisting(); 

からの応答を読み取るために、次の方法を使用していた今、私は次のような方法

public static async Task<string> ReadAsync(CancellationToken cancellationToken,DataReader dataReaderObject) 
     { 
      string response = string.Empty; 
      try 
      { 
       var flag = false; 
       Task<UInt32> loadAsyncTask; 
       uint readBufferLength = 1024; 
       cancellationToken.ThrowIfCancellationRequested(); 
       dataReaderObject.InputStreamOptions = InputStreamOptions.Partial; 
       loadAsyncTask = dataReaderObject.LoadAsync(readBufferLength).AsTask(); 

       UInt32 bytesRead = await loadAsyncTask; 
       if (bytesRead > 0) 
       { 
        byte[] bytes = new byte[bytesRead]; 
        dataReaderObject.ReadBytes(bytes); 
        //response = Encoding.ASCII.GetString(bytes); 
        // response = Convert.ToString(bytes); 
        response= ASCIIEncoding.ASCII.GetString(bytes); 
       } 
      } 
      catch (Exception ex) 
      { 
       response = string.Empty; 
      } 
      return response; 
     } 

を使用して、Windows 10のアプリで同じことを実施しています私の以前のデスクトップアプリケーションでSERIALPORTクラスを使用していましたしかし、私は異なるエンコーディング形式で応答を得ているように見えます。 両方の応答をメモ帳++でコピーしたところ、次のような違いが見つかりました:

enter image description here ここで何が問題になりますか? Windows 10アプリでserialPort.ReadExisting()と同等の機能はありますか?

SerialPort.ReadExisting Method()
+0

従来のSerialPortコードを貼り付けることができれば助かります。あなたの送信は何バイトですか? – Jackie

答えて

0

ストリームと文字列としてSerialPortオブジェクトの内部バッファの内容を返すように、Windows 10アプリでReadExisting()に相当DataReader.ReadString | readString methodであるべきです。

しかし、DataReader.ReadBytes | readBytes methodを使用しても問題ありません。問題はバイト配列を文字列に変換する方法です。ここでのバイトは、あなたがこのような文字列を取得することができますことが可能であり、uint8のエンコーディングを使用しています。

Encoding.UTF8.GetString(bytes); 

あなたはJapaneses blogを参照することができ、それはASCIIコード化データを書き込みますが、まだUTF8として読む必要があります。

関連する問題