1 回答

TA貢獻1890條經驗 獲得超9個贊
正如我在評論中所寫,您實際上應該僅將(主)UI 線程用于 UI。在工作線程上執行任何其他長時間運行的非 UI 操作。
您可能不介意 UI“掛起”10 秒,但用戶肯定會感到惱火。此外,阻止 UI 線程將導致 Windows 認為您的應用程序已凍結,因此您將獲得漂亮的“無響應”徽章和所有相關內容。這不僅看起來很糟糕,而且還會導致各種副作用。
您確實應該環顧四周,看看 .NET 為此類問題提供了哪些解決方案。
看,這就是你的工作流程:
打印一條消息
開始初始化
???
初始化完成-->打印“done”
開始運行
這是什么?這是一個異步處理。您啟動一個操作并異步繼續 - 這意味著僅當該操作完成時。
.NET 為此提供了很多工具,例如 APM(異步編程模型)。但實現異步處理的最簡潔、最強大的方法是 TAP - 基于任務的異步編程模式,更廣為人知的名稱是async
/ await
。
看,您的問題可以使用 TAP 通過幾行代碼來解決:
async void StartTest_btn_Click(object sender, RoutedEventArgs e)
{
OutputText("Please Wait\r\n");
// Set_COMM_MODE will be executed on a worker thread!
// The main (UI) thread won't block. It will continue.
// But the StartTest_btn_Click method itself will pause until the task is finished.
await Task.Run(() => Set_COMM_MODE("02"));
// This line will only be executed, after the Set_COMM_MODE call is completed;
// furthermore, it will be executed on the UI thread again!
OutputText("Done\r\n");
}
您確實應該更多地了解現代編程技術,TAP 就是其中之一。
- 1 回答
- 0 關注
- 169 瀏覽
添加回答
舉報