gpt4 book ai didi

c# - 在运行其余方法之前更新 UI

转载 作者:太空狗 更新时间:2023-10-29 20:09:54 25 4
gpt4 key购买 nike

我有一个必须在 UI 线程中完成的长时间运行的操作(涉及无法卡住的 UI 元素)。我想在运行操作之前显示忙碌指示符。

busyIndicator.Visibility = Visibility.Visible;
LongRunningMethod();
busyIndicator.Visibility = Visibility.Collapsed;

当然这是行不通的,因为在操作完成之前不会进行渲染。我尝试使用 Task.Yield() 异步运行其余方法:

busyIndicator.Visibility = Visibility.Visible;
await Task.Yield();
LongRunningMethod();

据我所知,这也是行不通的,因为该方法的其余部分的优先级高于渲染操作。

我如何使用 TPL 来做到这一点?

UPD: LongRunningMethod 本质上不能在单独的线程中运行(适用于复杂的 WPF 3D 模型),无论如何我现在无法对其进行更改.因此,请不要提供基于完全或部分在单独线程上运行它的解决方案。

最佳答案

如果你想中断 UI 方法的执行,那么你必须使用 async/await

类似(未经测试)

busyIndicator.Visibility = Visibility.Visible;
await Task.Run(() => await Task.Delay(1)); // here method will exit and repaint will occurs
LongRunningMethod();
busyIndicator.Visibility = Visibility.Collapsed;

但是根据方法运行的时间长短,您可能希望将其完全放入另一个线程(TaskBackgroundWorker),并且只在需要时调用方法界面线程。

关于c# - 在运行其余方法之前更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27418202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com