我正在爲我的應用程序編寫一個串行端口連接處理程序,因此用戶不必自行連接到端口和從端口斷開連接。您可以在下面看到我的計劃維護連接的邏輯和方式。串行端口連接處理程序
我的問題是,由於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