我有一段代码,我想使用Task.Run()在后台运行一个循环,并使用Invoke()更新循环中的一些UI元素。但是,即使在使用awaitTask.Run()之后,代码仍然会等待循环结束,然后才继续执行下一行代码。
下面是相关的代码片段:
await Task.Run(() =>
{
while (panel1.Controls.Contains(button))
{
button.Invoke((MethodInvoker)(() =>
{
// UI update logic here
}));
Thread.Sleep(1);
}
});
字符串
我期望通过使用awaitTask.Run(),循环将在后台异步运行,从而允许代码继续执行。但是,代码似乎仍然要等待循环完成才能继续前进。
我错过了什么吗?如何确保代码继续执行而不等待循环结束?如果你能帮忙的话,我将不胜感激。谢谢你,谢谢
1条答案
按热度按时间von4xj4u1#
没有什么严重的问题。当你把
await
放在一个可等待的调用之前(例如Task.Run
)它等待它到最后。你所做的绝对可以防止你的
UI
线程阻塞。有一个老问题,我们在WinForm, WPF, ...
上没有async/await
。所以如果你想在后台运行这个任务,你应该这样做:
字符串
现在你可以随时停止这个任务,它不会像以前那样阻塞你的
UI
线程。