【发布时间】:2022-12-30 20:52:05
【问题描述】:
在我的 blazor 中,我输入:
@if (cat.IsMeowing)
{
<div>Cat is meowing!!!</div>
}
在我的Cat 课上,我把这个:
public bool IsMeowing {get; set;} = false;
public void Meow()
{
Task.Run(async () =>
{
await Task.Delay(3000); // Cat takes a deep breath
IsMeowing = true; // MEOW!!!!!!!
});
}
我想要的行为是当我调用 Meow 时,有一个延迟,然后它设置导致 Div 出现的变量。但是,blazor 似乎没有注意到变量在通过另一个线程的闭包更新时已更新。
如果我删除任务,只设置延迟和 IsMeowing=true,则 blazor 会注意到它并正确更新。
有没有办法在不实现回调的情况下解决这个问题?
最终,我想创建一个类,当对其调用方法时,它会在 blazor 注意到的 3 秒后设置一个变量。假设我想显示一条消息“此操作需要一段时间......”如果我正在做其他密集工作时 3 秒过去了,那么我可以设置其中之一,开始做我的密集工作,并且在我的密集工作完成后取消它。如果密集工作花费的时间小于 3 秒,则不会发生任何事情,如果花费的时间超过 3 秒,则消息将通过 blazor if 显示。
【问题讨论】: