C# 有效地检查串行端口状态
我使用的是C# 有效地检查串行端口状态,c#,serial-port,task,C#,Serial Port,Task,我使用的是SerialPort,需要对其状态做出反应(有自定义的端口数据读取指示器)。 我创造了这个结构: this.connectionWatcher = new Task(async () => { while (!this.cancelReceive.IsCancellationRequested) { if ((this.port == null || !this.port.IsOpen) && this.machineState.I
SerialPort
,需要对其状态做出反应(有自定义的端口数据读取指示器)。
我创造了这个结构:
this.connectionWatcher = new Task(async () =>
{
while (!this.cancelReceive.IsCancellationRequested)
{
if ((this.port == null || !this.port.IsOpen) && this.machineState.IsConnected)
this.machineState.IsConnected = false;
if (this.port != null && this.port.IsOpen && !this.machineState.IsConnected)
this.machineState.IsConnected = true;
await Task.Delay(1000);
}
}, this.cancelReceive.Token);
有machineState.IsConnected
是bool
的属性,用于指示器
我有两个问题(两个问题可以同时解决,imho):
当我关闭应用程序的主窗口时,此任务
未停止李>
如何更有效地执行此操作,因为while
不是最佳实践,对CPU有很大影响
“…虽然不是最佳做法,但对CPU有很大影响…”-虽然不是最佳做法,但在您的情况下,由于您的任务,它不会对CPU有很大影响。延迟。现在,你是否应该做后者是一个全新的问题……除了我最后的评论之外,订阅PinChanged
事件要比在和Task.Delay()时循环使用来检测DSR和CTS的变化要优雅得多。不完全确定为什么只需要为IsOpen
使用逻辑,这很简单。无需循环启动时,任务管理中CPU的负载增加连接COM端口是微不足道的。为什么你的CPU负载增加了?我不知道,我认为这是因为使用了while循环。