Serial port VaComm组件未在RxCHAR事件中激发

Serial port VaComm组件未在RxCHAR事件中激发,serial-port,c++builder,serial-communication,c++builder-6,Serial Port,C++builder,Serial Communication,C++builder 6,VaComm组件通过COM端口封装与外部设备的通信。我的程序正在使用以下代码与测量设备通信: void Form::OnButton\u Click() { VaComm1->PortNum=param.serialComm.port; VaComm1->Open(); VaComm1->WriteText(“bla-bla\r\n”); 睡眠(3000); VaComm1->WriteText(“另一个bla-bla”); } 我已经设置了OnRxChar事件处理程序(通过表单设计器),如下

VaComm组件通过COM端口封装与外部设备的通信。我的程序正在使用以下代码与测量设备通信:

void Form::OnButton\u Click()
{
VaComm1->PortNum=param.serialComm.port;
VaComm1->Open();
VaComm1->WriteText(“bla-bla\r\n”);
睡眠(3000);
VaComm1->WriteText(“另一个bla-bla”);
}
我已经设置了OnRxChar事件处理程序(通过表单设计器),如下所示:

void\uu快速调用TForm\u Main::VaComm1RxChar(TObject*Sender,int Count)
{
AnsiString str=VaComm1->ReadText();
如果(!str.IsEmpty())
{
//处理接收到的数据
}
}

问题是,即使在接收到数据时也不会触发此事件(可以通过在无限循环中调用TVaComm::ReadText方法进行检查)。向连接的设备发送两个命令也成功(可在设备显示屏上看到)。当输入缓冲区中有一些数据时,除了打开COM端口接收OnRxChar事件外,还需要什么?我也不明白兄弟组件TVaBuffer的目的是什么?目前我没有使用它,可以通过ReadText方法接收数据(如上所述)。

我看到的大多数CommPort组件都依赖于调用线程的活动消息循环来触发异步事件。在这种情况下,在OnButon_Click()退出之前,主线程将被阻止处理新消息。请尝试类似以下内容:

void Form::OnButton\u Click()
{
VaComm1->PortNum=param.serialComm.port;
VaComm1->Open();
VaComm1->WriteText(“bla-bla\r\n”);
}
void\uu fastcall TForm\u Main::VaComm1RxChar(TObject*发送方,int计数)
{
AnsiString str=VaComm1->ReadText();
如果(!str.IsEmpty())
{
//处理接收到的数据
如果(str是您期望的答复)
VaComm1->WriteText(“另一个bla-bla”);
}
}