我正在为我的应用程序编写一个串行端口连接处理程序,因此用户不必自行连接到端口和从端口断开连接。您可以在下面看到我的计划维护连接的逻辑和方式。串行端口连接处理程序
我的问题是,由于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;
}
}
}
如果我想自动处理与端口的连接(例如,如果用户选择使用不同的端口),我确实需要一个(或使用Timer作为@pitersmx建议)。另外我有一个处理接收数据的事件处理程序。 – Oystein