在命令中使用 while 循环会冻结窗口 [关闭]

分享于2022年09月08日 c# multithreading mvvm wpf 问答
【问题标题】:Using while loop in a command freezes window [closed]在命令中使用 while 循环会冻结窗口 [关闭]
【发布时间】:2022-08-01 23:51:16
【问题描述】:

我有一个执行命令的按钮,它包含一个while循环,应用程序在我启动命令后冻结,我也尝试递归运行它,但我得到了相同的行为,并且使用计时器不是一个选项,不能使用间隔调用任务


【解决方案1】:

您必须在单独的线程中运行代码的阻塞部分。在主 UI 线程上运行它会冻结 UI。

您可以使用 Tasks 来执行此操作。

using System.Threading.Tasks;
Task.Run(() => {
    while (condition)
    {
        // operation
    }
});

【讨论】:

  • 后台线程并不总是***或正确的解决方案。这实际上取决于阻塞的实际代码。例如,使用异步 API 会提供更好的性能。