示例:事件模式下的协议配置

这是串行
Port
对象中所包含的 NetLogic 的示例,该对象使用事件模式读取从设备异步发送的数据。链接到按钮按下事件的
OnClick
方法可用于停止当前的读取操作并开始新的读取操作。
要使用事件模式,必须将
Timeout
属性设置为
0
。这样,只要所请求的数据未到达串行端口,
ReadBytes
就会一直处于阻止状态。
可以使用
CancelRead
方法或
Close
方法停止读取。在这两种情况下,都会生成
ReadCanceledException
异常。要彻底关闭 NetLogic,必须通过调用 NetLogic
Stop
中的
Close
方法终止待处理的所有读取操作。
可以从 SerialPortDemoEventMode.zip 下载示例项目。
public class RuntimeNetlogic1 : BaseNetLogic { private SerialPort serialPort; private LongRunningTask task; public override void Start() { serialPort = (SerialPort)Owner; serialPort.Timeout = TimeSpan.FromMilliseconds(0.0); task = new LongRunningTask(Run, Owner); task.Start(); } [ExportMethod] public void OnClick() { // Cancel current read serialPort.CancelRead(); task.Cancel(); // Start new read task = new LongRunningTask(Run, Owner); task.Start(); } private void Run() { while(!task.IsCancellationRequested) { try { // Block until 3 bytes arrive on serial var result = serialPort.ReadBytes(3); foreach (var b in result) Log.Info(String.Format("0x{0:x2}", b)); } catch (ReadCanceledException ex) { // In case of read canceled, exit from the loop Log.Info(ex.Message); return; } catch (Exception e) { Log.Error(e.Message); } } } public override void Stop() { // Explicit call to Close to cancel pending read (if any) serialPort.Close(); task.Cancel(); } }
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈