【发布时间】:2011-07-07 14:51:22
【问题描述】:
我有一个应用程序,它从 COM 端口读取数据,然后对接收到的数据进行处理。我目前正在使用 COM 端口仿真器(因为我没有可用的设备),但我正在向它提供数据样本。如果我在开始传输数据之前打开 COMPort,程序似乎工作得很好。但是,如果我在打开 COMPort 之前开始传输,然后打开端口,则永远不会触发 dataReceived 事件,并且我永远无法获取任何数据。我什至尝试在打开端口后立即刷新 INBuffer,但无法从中读取。
我打开端口的代码是这样的:
public void setupComPort(string baudRate, string dataBits, string stopBits, string parity, string portName)
{
if (comPort.IsOpen)
comPort.Close();
comPort.BaudRate = int.Parse(baudRate);
comPort.DataBits = int.Parse(dataBits);
comPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), stopBits);
comPort.Parity = (Parity)Enum.Parse(typeof(Parity), parity);
comPort.PortName = portName;
// When data is recieved through the port, call this method
comPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
try
{
// Open the port
comPort.Open();
//If there's data in buffer, discard so we can start receiving
//comPort.DiscardInBuffer();
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Error Opening Port", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
任何帮助将不胜感激。
【问题讨论】:
-
我很困惑,
if I start transmitting before I open the COMPort then the dataReceived event is never fired;如果 com 端口未打开,它不应该触发。 -
我的意思是我开始传输,然后设置我的端口。那有意义吗?我将编辑我的问题以澄清。
-
啊,好吧,是的,这是有道理的。应该是模拟器的问题...
-
你觉得呢?如果我在 Putty 或 HyperTerminal 中做同样的事情,它会获取所有数据,所以我不确定。
标签: c# serial-port