Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#串行端口自动关闭_C#_Serial Port - Fatal编程技术网

C#串行端口自动关闭

C#串行端口自动关闭,c#,serial-port,C#,Serial Port,我正试图从COM串行端口读取数据,但该端口会自动随机关闭,我不知道该怎么办,在我的代码中我没有调用close方法。我尝试在dispose上设置事件,设置try catch并调试所有catch,但没有成功 试图创建一个无限线程,当SerialPort.isOpen返回false时,线程会重新打开串行端口,但线程会以100%的速度消耗cpu 不知道还能做什么 打开串行端口的代码 _serialPort.DataReceived += new SerialDataReceivedEventHandle

我正试图从COM串行端口读取数据,但该端口会自动随机关闭,我不知道该怎么办,在我的代码中我没有调用close方法。我尝试在dispose上设置事件,设置try catch并调试所有catch,但没有成功

试图创建一个无限线程,当SerialPort.isOpen返回false时,线程会重新打开串行端口,但线程会以100%的速度消耗cpu

不知道还能做什么

打开串行端口的代码

_serialPort.DataReceived += new SerialDataReceivedEventHandler(RecebendoDados);
_serialPort.Disposed += new EventHandler(PortaFechou);
_serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(PortaErro);
_serialPort.PinChanged += new SerialPinChangedEventHandler(PinMudou);                
_serialPort.Open();
PortIsOpen = _serialPort.IsOpen;

你为什么一直打开COM端口?写的时候把它打开,然后关上
使用以下命令:

    if (!serialPort1.IsOpen)
        serialPort1.Open();
    if (serialPort1.IsOpen)
    {
        serialPort1.WriteLine(inst.ToString());
        serialPort1.Close();
    }

你为什么一直打开COM端口?写的时候把它打开,然后关上
使用以下命令:

    if (!serialPort1.IsOpen)
        serialPort1.Open();
    if (serialPort1.IsOpen)
    {
        serialPort1.WriteLine(inst.ToString());
        serialPort1.Close();
    }


串行端口对象是否在关闭时引发要通知的事件?如果是这样,重新打开的线程可以等待,并在关闭时收到通知。请确保禁用硬件控件。它们是过时的,特别是当您的电缆连接它们时,可能会出现问题。我还发现USB/9针D型连接器适配器在错误连接时会出现这种行为。对于Mark,文档中的port对象说它在COM端口释放(关闭后)时会引发一个事件,但我尝试监视此事件,但它不会触发,它从未引发。对于jdweng,我使用了其中一个适配器(usb/9pinD)是我买的,但由于我的笔记本电脑上没有串行端口,这很难测试和弄清楚,我将尝试使用pc和PCI COM端口的其他功能。你能解释一下“禁用硬件控制”吗?禁用何处?端口不太可能自动关闭。您的另一个线程:提到ObjectDisposedException。垃圾收集器可能正在为您处理端口。作为实验,请尝试使用GC.KeepAlive()维护对串行端口的引用。串行端口对象是否会在关闭时引发要通知的事件?如果是,则重新打开的线程可以等待,并在关闭时收到通知。请确保禁用硬件控件。它们是过时的,并且可能会出现问题,特别是在连接电缆的情况下。我还看到了USB/9针D-Connectors适配器在错误连接时会出现这种行为。对于Mark,文档中的port对象说它在COM端口释放(关闭后)时会引发一个事件,但我尝试监视此事件,但它不会触发,它从未引发。对于jdweng,我使用了其中一个适配器(usb/9pinD)这是我买的,但由于我的笔记本电脑上没有串行端口,很难测试和弄清楚,我将尝试使用pc和PCI COM端口的其他功能。你能解释一下“禁用硬件控制”吗?禁用何处?端口不太可能自动关闭。您的另一个线程:提到ObjectDisposedException。垃圾收集器可能正在为您处理端口。作为实验,请尝试使用GC.KeepAlive()维护对串行端口的引用。我将其保持打开状态,因为设备发送连续的信息,我甚至不写任何东西,只听发送的数据,其中有很多信息,其中一个是秒表,它递增并发送数据(从设备到pc)…所以我需要一直打开它,以免丢失anything@EduardoEstevão,你尝试了
serialPort1.ReadTimeout=SerialPort.InfiniteTimeout;
,对吗?不,我尝试了一个很大的数字,但没有看到这个选项,我会研究一下,谢谢你,直到现在thing@EduardoEstevão,检查
if(!\u serialPort.IsOpen;)的线程
您应该将其休眠一段时间(端口保持打开的预期时间)。这将使线程占用更少的CPU使用。我保持线程打开,因为设备发送连续的信息,我甚至不写任何东西,只听发送的数据,其中有很多信息,其中之一是一个秒表,它递增并发送数据(从设备到pc)…所以我需要一直打开它,以免丢失anything@EduardoEstevão,你尝试了
serialPort1.ReadTimeout=SerialPort.InfiniteTimeout;
,对吗?不,我尝试了一个很大的数字,但没有看到这个选项,我会研究一下,谢谢你,直到现在thing@EduardoEstevão,检查
if(!\u serialPort.IsOpen;)的线程
您应该将其休眠一段时间(端口保持打开的预期时间)。这将减少线程占用的CPU使用量。