- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 Visual Studio 2008 C# .net 2.0 CF 应用程序,它使用 System.IO.Ports.SerialPort
类从串行端口读取数据。不幸的是,SerialDataReceivedEventHandler
从未被调用。
我这样打开端口:
private SerialPort serial_port_;
protected void OpenSerialPort(string port, int baud)
{
if (serial_port_ == null)
{
serial_port_ = new SerialPort(port,
baud,
Parity.None,
8,
StopBits.One);
}
else
{
serial_port_.BaudRate = baud;
serial_port_.PortName = port;
}
if (!serial_port_.IsOpen)
{
serial_port_.Open();
serial_port_.DataReceived += new SerialDataReceivedEventHandler(OnSerialDataReceived);
}
}
private void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs args)
{
Debug.WriteLine("Serial data received");
}
但是,如果我在端口打开后立即添加 Debug.WriteLine(serial_port_.ReadLine());
,我会在输出窗口中看到来自端口的一行文本,就像我希望。
那么,为什么 ReadLine
起作用,而 DataReceived
事件却不起作用?
谢谢,保罗H
编辑:进一步的测试表明此代码适用于某些设备,但不适用于其他设备。 DataReceived
事件需要什么才能正常工作?
进一步的挫败感:在此设备上,ReadExisting
总是返回 null 而 BytesToRead
总是返回 0。不过,ReadLine()
和 Read()
都工作得很好。
最佳答案
不要在数据接收处理程序中放置阻塞读取。如果处理程序触发并且没有整行 line 可供读取,它将阻塞。在您发布的代码中没有任何类型的阅读。
来自 MSDN:“PinChanged、DataReceived 和 ErrorReceived 事件可能会被乱序调用,并且在底层流报告错误和执行事件处理程序之间可能会有轻微的延迟。只有一个事件处理程序可以一次执行。"
关于c# - 使用 DataReceived 事件从串行端口读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474421/
我正在使用 Twisted 从套接字接收数据。我的协议(protocol)类继承自协议(protocol)。 由于Python 2.*中没有byte类型,所以接收到的数据类型是str。当然, len
我正在使用串行端口与设备通信。该设备具有 RS-485,另一侧(PC)是 RS-232(虚拟端口)。设备正常工作、发送和接收数据。 问题是,有时不会触发 DataReceived 事件。我使用 Sys
我有一个 WPF 测试应用程序,用于评估基于事件的串行端口通信(与轮询串行端口)。问题是 DataReceived 事件似乎根本没有触发。 我有一个非常基本的 WPF 表单,其中包含用于用户输入的 T
我一直在编写一个概念验证类型的程序,该程序通过网络发送屏幕截图,并且由于某种原因,发送数据后没有调用 dataRecieved 方法。这是我的代码 服务器 from twisted.internet
根据 DataReceived 事件的 MSDN,它说 The DataReceived event is raised on a secondary thread when data is rece
我正在尝试使用 Twisted 框架编写服务器并希望多次接收数据 class Echo(Protocol): def connectionMade(self): print "
我正在使用 protocol.Protocol 从服务器接收数据。如下 from twisted.internet.protocol import Protocol, Factory class My
我正在使用 visual C# 2010 windows 窗体应用程序串口 对象在串行端口上接收十六进制数据字节。 但是,我意识到我的 DataReceived 事件被触发了两次,即使我已经读取了缓冲
我正在 PC 和嵌入式设备之间实现串行协议(protocol)。 我正在将文件内容从 PC 分块发送到设备。 在我开始发送文件之前,我会发送文件的名称和大小,然后等待来自设备的 ACK,然后开始循环发
我有一个 Visual Studio 2008 C# .net 2.0 CF 应用程序,它使用 System.IO.Ports.SerialPort 类从串行端口读取数据。不幸的是,SerialDat
我目前正在使用一种称为 Fluke 5500A 多产品校准设备的设备。我用 C# 编写了一个小程序来与它交互并了解有关它如何工作的更多信息,但不幸的是 SerialPort.DataReceived
我目前正在研究一个完全用 c# 编写的防盗报警解决方案。该程序与基于 USB 串行端口的 IO 板通信,该 IO 板具有硬连线到其中的警报传感器。我遇到了一个问题,即 DataReceived 事件无
假设只要有 100 个字节可用,我就从 SerialPort 读取数据,否则什么也不做。这意味着,串行端口缓冲区中的剩余数据仍然可用。此读取是在 DataReceived 的事件处理程序内完成的。 现
我正在尝试学习 python 扭曲的互联网框架,但有一件事让我感到困惑。使用 telnet 进行的初始测试表明,只要接收到数据,就会调用 protocol.Protocol.dataReceived(
我在 VS2008 express 中设置了一个 SerialDataReceivedEventHandler,其中包含一个基于表单的程序。我的串口设置如下: 115200, 8N1 启用 Dtr 和
我正在为我的 WPF 应用程序开发串行监视器,使用 C# 编程。我在管理 DataReceived 事件时遇到了麻烦,因为我想要一个实时监视器,例如 HyperTerminal 或 TeraTerm(
我是twisted新手,在dataReceived内调试我的代码时遇到困难。 twisted.internet.protocol.Protocol的方法对象。 给出一些像这样的代码 class Pri
我从 MSDN 文档中了解到,事件 DataReceived 不一定会每字节触发一次。 但是有谁知道导致事件触发的机制到底是什么? 每个字节的接收是否会重新启动一个计时器,该计时器必须在事件触发之前达
我知道 DataReceived event在后台线程上触发。我如何告诉 GUI 线程在事件处理程序中显示数据? 最佳答案 此代码假定您已经添加了一个表单级 SerialPort 对象,并在其 Dat
我正在为 modbus 和串行连接构建一个类库,我需要返回一个字节数组,但是当使用来自 System.IO.Ports 的 DataReceived 事件时,我不能返回任何,因为它的类型是无效的。另外
我是一名优秀的程序员,十分优秀!