Winforms 如何在串行端口仍以c windows窗体接收数据时关闭串行端口?

Winforms 如何在串行端口仍以c windows窗体接收数据时关闭串行端口?,winforms,visual-c++,serial-port,Winforms,Visual C++,Serial Port,如果串行端口仍在接收数据,如何关闭串行端口 我正在写一个程序,串口将始终从无线射频接收器接收数据。对于无线射频接收机,它将连续接收数据 我写道: this -> serialPort1 -> ReadLine(); 接收数据。由于连续接收来自RF模块的数据,读取事件将始终运行 在这里,当我想关闭端口时: this->serialPort1->Close(); 这就产生了一个问题 IOException was unhandled "The I/O operation

如果串行端口仍在接收数据,如何关闭串行端口

我正在写一个程序,串口将始终从无线射频接收器接收数据。对于无线射频接收机,它将连续接收数据

我写道:

this -> serialPort1 -> ReadLine();
接收数据。由于连续接收来自RF模块的数据,读取事件将始终运行

在这里,当我想关闭端口时:

 this->serialPort1->Close();
这就产生了一个问题

IOException was unhandled
"The I/O operation has been aborted because of either a thread exit or an application request."
我的要求是我可以关闭端口没有这个问题,或者我可以退出它没有这个问题,我已经尝试解决了几天,但仍然无法处理这个问题


提前感谢。

如果不使用线程,您不能同时使用函数<代码>读取行和函数<代码>关闭。因此,我假设这些调用位于不同的线程中

调用
ReadLine
的线程应该检查一个事件,该事件指示它应该停止其操作,并指示它处于空闲或已完成状态


要调用
Close
的线程应设置停止事件并等待空闲/完成指示。

您如何创建/打开COM端口?你在用图书馆吗?如果你正在使用这个函数,那么你可以用这个函数关闭你的端口。这是非常危险的,很多事情都会出错。死锁是很常见的。在您的情况下,驱动程序会摔倒并生成一个隐藏的工作线程,从而引发事件崩溃。如果你想支持这个,那么不要调用Close(),让Windows来关闭句柄;然后我将关闭它,我正在使用DataReceived事件,如何停止事件并关闭端口?有停止事件的教程吗?我正在使用DataReceived事件来运行接收部分,无线设备将继续接收数据并使读取事件始终运行。创建此线程有什么建议吗?使用
waitformultiplyoobjects
并等待这两个事件。这允许在停止和接收之间进行区分。使用的其他功能:
CreateEvent
WaitForSingleObject
(用于检查空闲指示)
SetEvent
,(
ResetEvent
),
CloseHandle
。有一个很好的文档,其中包含的函数应该足以作为教程使用。谢谢,我会试试看^^
  public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {

            if (!port.IsOpen)
                return;

               port.ReadLine();

        }