【发布时间】:2021-05-19 18:56:36
【问题描述】:
checkerThread = new Thread(new ThreadStart(() => CheckTokens()));
checkerThread.Start();
// Re-enable controls when done
stopCheckButton.Visible = false;
stopCheckButton.Enabled = false;
startCheckButton.Enabled = true;
loadTokenListButton.Enabled = true;
exportTokensButton.Enabled = true;
clearCheckButton.Enabled = true;
clearValidButton.Enabled = true;
tokenInputBox.Enabled = true;
当线程运行时,我的表单中的控件被禁用。我想在线程完成后重新启用它们。在不被thread.Join() 阻塞用户界面的情况下,我该怎么做?
【问题讨论】:
-
你听说过异步/等待吗?
-
使用 async / await 取决于 imo 必须完成的工作类型。
-
BackgroundWorker 在工具箱中,您会喜欢它的 RunWorkerCompleted 事件。
-
记住 - “await” 可能像病毒:它可以用愚蠢的“Async”声明“感染”代码库中不相关的部分。
-
@paulsm4 不,它只会影响代码库的相关部分,即任何关心异步操作完成时执行操作的部分。而且这个问题并不特定于
async作为关键字,它是异步操作所固有的,即使您使用其他形式的异步,也必须不阻塞 UI。
标签: c# windows vb.net visual-studio winforms