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 关注
- 103 浏览
添加回答
举报