2016-05-21 10 views
-1

CLI/C++でシリアルデータを読み込もうとしています。私はビデオチュートリアルからVisual C++でシンプルなプログラムを持っていますhttps://sourceforge.net/projects/kle8309/files/CLI/C++シリアルポート - > ReadLine()

SerialPort->ReadLine()関数を呼び出すと、Timeout Exceptionが得られます。

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) { 
    // check if port is ready for reading 
    if(this->serialPort1->IsOpen){ 
     // Reset the text in the result label. 
     this->textBox1->Text = "it is open!"; 

     // this will read manually 
     try{ 
      this->textBox1->Text=this->serialPort1->ReadLine(); 
     } 
     catch(TimeoutException^){ 
      this->textBox1->Text="Timeout Exception"; 
     } 
     // Disable the init button the asynchronous operation is done. 
     this->button1->Enabled = false; 
    } 
    else{ 
     // give error warning 
     this->textBox1->Text="Port Not Opened";} 
} 

私は間違いをどこで知っていますか?

+0

SerialPort :: WriteTimeoutプロパティを設定しないで*最初に動作させるようにしてください。だから、もう例外はありません。それはあなたのUIをハングアップさせるでしょう、あなたは今それを正しく行う方法を発見するためにはるかに良い確率を持っています。 DataReceivedイベントを実装し、Handshakeプロパティを正しく設定すること。 –

答えて

-1

@ Hans_Passantありがとうございました、私はReadTimeoutWriteTimeoutのプロパティを変更しました。私はというサンプル機能を見つけました。

#using <System.dll> 

using namespace System; 
using namespace System::IO::Ports; 

ref class PortDataReceived 
{ 
public: 
    static void Main() 
    { 
     SerialPort^ mySerialPort = gcnew SerialPort("COM1"); 

     mySerialPort->BaudRate = 9600; 
     mySerialPort->Parity = Parity::None; 
     mySerialPort->StopBits = StopBits::One; 
     mySerialPort->DataBits = 8; 
     mySerialPort->Handshake = Handshake::None; 
     mySerialPort->RtsEnable = true; 

     mySerialPort->DataReceived += gcnew 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(); 
     Console::WriteLine("Data Received:"); 
     Console::Write(indata); 
    } 
}; 

int main() 
{ 
    PortDataReceived::Main(); 
} 

しかし、まだ問題があります。このサンプル関数では、Console::ReadKey()へのカリングがあります。 CLI/C++では動作しません。私はどこでミスをしたのですか?

関連する問題