C+中带有侦听器的WaitCommEvent+;Winforms应用程序

C+中带有侦听器的WaitCommEvent+;Winforms应用程序,winforms,serial-port,c++-cli,listener,Winforms,Serial Port,C++ Cli,Listener,我正在尝试编写winforms,从Arduino板读取数据。CLR应用程序不允许线程,所以我必须用侦听器解决这个问题。当端口上有可用数据时,如何使用WaitCommEvent触发侦听器 我的代码与本例中的示例2类似使用COM端口接收的数据。com端口中的用户ReadLine方法,例如: private: System::Void comPort1_DataReceived(System::Object ^sender, System::IO::Ports::SerialDataRecei

我正在尝试编写winforms,从Arduino板读取数据。CLR应用程序不允许线程,所以我必须用侦听器解决这个问题。当端口上有可用数据时,如何使用WaitCommEvent触发侦听器


我的代码与本例中的示例2类似

使用COM端口接收的数据。com端口中的用户ReadLine方法,例如:

private:
    System::Void comPort1_DataReceived(System::Object ^sender, System::IO::Ports::SerialDataReceivedEventArgs ^e)
    {
        System^ data = comPort1->ReadLine();
        this->Invoke(gcnew EventHandler(processData));
    }

    System::Void processData(System::Object ^sender, System::EventArgs ^e)
    {
        // data receive
    }

使用.Net,请阅读本教程:。

那么,你说过放弃使用WaitCommEvent,是吗?不必,我提出了一个完全基于.Net的解决方案。但您可以使用C++/CLI包装器与Windows窗体应用程序交互Win32 API。它不允许std::thread,使用System::Threading::thread或CreateTread()完全没有问题。不要自己调用WaitCommEvent,让SerialPort类为您完成。这就是它引发DataReceived事件的方式。