【发布时间】:2017-06-13 07:48:41
【问题描述】:
我正在为我的应用程序编写一个串行端口连接处理程序,因此用户不必自己连接和断开端口。您可以在下面看到逻辑以及我打算如何保持连接。
我的问题是由于 while 循环导致 CPU 使用率飙升。如何在不影响应用程序其他部分的情况下减慢这样的循环?
Thread.Sleep() 是一个显而易见的选择。但是当连接处理程序由Task.Run() 启动时,应用程序的其他部分是否由线程处理并受到Thread.Sleep() 的影响?如果是这样,另一种选择是在单独的线程中启动处理程序。但是,当处理程序正在操作从不同线程启动的对象(如 SerialPort 对象)时,这会导致问题吗?
private void StartConnectionHandler() {
Task.Run(() => ConnectionHandler());
}
private enum ConnectionState {
AwaitPortSelected,
IsPortValid,
OpenPort,
AwaitLinkStateChange,
ClosePort
}
private void ConnectionHandler() {
var connectionState = ConnectionState.AwaitPortSelected;
while (!SerialPortCts.IsCancellationRequested) {
switch (connectionState) {
case ConnectionState.AwaitPortSelected:
break;
case ConnectionState.IsPortValid:
break;
case ConnectionState.OpenPort:
break;
case ConnectionState.AwaitLinkStateChange:
break;
case ConnectionState.ClosePort:
break;
}
}
}
【问题讨论】:
-
如果我想自动处理与端口的连接(例如,如果用户选择使用不同的端口),我确实需要一个(或按照@pitersmx 的建议使用定时器)。此外,我还有一个用于处理接收到的数据的事件处理程序。
标签: c# serial-port