none
Visual studio C++ 2005下使 SerialPort RRS feed

  • 問題

  • 請問各位有人會使用現在NET2.0版提供獨立完整的RS-232類別 SerialPort嗎?
    我看MSDN都沒有範例程式,都只有VB & C#的請會的人敎一下吧
    或是有範例程式可以提供參考 感謝
    2006年8月1日 下午 12:43

解答

  • 我剛好最近用過,主要是要了解如何使用delegate,下面這個例子可將非同步收到的字串顯示在status bar上,給您參考。同步接收的話,只要直接呼叫serialport的read就可以了。

    因為非同步接收是在另一個thread裡面做的,跟主程式的thread不同,接收資料時若要用到UI元件的話,必須透過delegate方式呼叫主程式的function才行。只是我不太了解這個接收資料的thread什麼時候會結束,我在主程式裡面是否需要'關心'它是否已結束,需要其他高手指點。若有心得也請分享。

    Enjoy!

    best regards,

    Tim

    -------------

    private: System::Void serialPort1_DataReceived(System::Object^  sender, System::IO::Ports::SerialDataReceivedEventArgs^  e) {
         String ^str = String::Empty;
         try {
          while(serialPort1->BytesToRead) {
           str = String::Concat(str, serialPort1->ReadExisting());
          }
         } catch(...) {
          serialPort1->DiscardInBuffer();
          System::Threading::Thread::CurrentThread->Abort(); // close this thread-in-trouble ???  Do I need this line?
          return;
         }
         ChangeTxt(str); // a delegate function
    }

    delegate void ChangeTxtCallback(String ^str); // declare a new function type

    public: System::Void setStatus(String ^str) {
        toolStripStatusLabel->Text = str;
    }

    private: void ChangeTxt(String ^str) {
         ChangeTxtCallback ^d = gcnew ChangeTxtCallback(this, &Form1::setStatus);
         this->Invoke(d, gcnew array<String ^>{str});
    }

    2006年8月3日 上午 02:14