我想在循环中更新 WPF 应用程序中某些 UI 元素的位置。每次迭代后,应重新呈现 UI 以使更改可见。更新过程可以随时使用取消令牌停止。由于取消是由用户执行的,因此 UI 必须保持对输入的响应。我写了以下方法来做到这一点:
public async Task DoStuff(CancellationToken token)
{
do
{
DoLayoutUpdate();
await Dispatcher.Yield(DispatcherPriority.Input);
} while (!token.IsCancellationRequested);
}
这主要有效:UI在每次迭代后重新渲染,我可以单击按钮取消操作,以便输入也有效。问题是:如果没有输入并且没有要重新呈现的内容,则该方法会卡在 Yield 中。据推测,线程被阻塞,等待输入或呈现任务。
如果我将增加到 ,则该方法不会再卡住,但随后 UI 不会更新,输入不再被处理。DispatcherPriorityRender
我该如何解决这个问题?
富国沪深
慕仙森
阿晨1998
相关分类