C#serialPort:如果Write()上没有收件人,应用程序将挂起(虚拟空调制解调器)

eig*_*tx2 3 c# serial-port

我正在用C#开发一个PC WinForms应用程序,需要稍后连接到微控制器.目前,出于测试目的,我在计算机上创建了一个虚拟零调制解调器,并将其与终端程序相关联.

我正在使用的虚拟零调制解调器是"com0com":http://sourceforge.net/projects/com0com/

以下是COM端口对设置的屏幕截图: 在此输入图像描述

在我的应用程序中,我使用该组件serialPort.这就是serialPort的设置方式:

public bool SerialPortSetup(String cp)
{
    String port = cp;
    int baud = 19200;
    Parity parity = Parity.None;
    int databit = 8;
    StopBits stopbit = StopBits.One;

    try
    {
        // Initialize serial port
        serialPort1 = new SerialPort(port, baud, parity, databit, stopbit);
        serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPortDataReceived);
        serialPort1.Open();
        return true;
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

serialPort的其他属性: 在此输入图像描述

我连接到COM2的终端程序设置了相同的波特率,奇偶校验,数据位,停止位等.当我将自己的应用程序连接到COM1,终端连接到COM2时,一切正常.双向书写和阅读.

但是,当我不使用COM2端口(即终端程序未打开)时,我的应用程序挂起了我开始使用的第二个serialPort1.Write(str),其中str只是一个随机字符串.从Visual Studio运行我的应用程序时,我只能通过停止调试来关闭它.它不像Windows标记为"没有响应".顺便说一句,我总是在写入之前检查一个打开的serialPort.

我需要这个问题才能消失.想法?

Mat*_*att 8

我知道这个问题有点偏旧,但我在寻找同一问题的解决方案时遇到过这个问题.

您需要更改com0com中的几个设置,这些设置在http://www.magsys.co.uk/comcap/onlinehelp/null_modem_emulator_com0com.htm中描述.

简而言之,您需要为接收端口启用缓冲区溢出,并在发送端口上启用波特率仿真.使用OP图像中的对话框很简单.

  • 这个令人敬畏的建议节省了我几个小时!我已经花了一些时间试图解决这个问题,然而,打开缓冲区溢出和波特率仿真工作! (4认同)