【问题标题】:Blazor doesn't detect variable change if it occurs on a separate Thread如果变量更改发生在单独的线程上,则 Blazor 不会检测到它
【发布时间】: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 显示。

【问题讨论】:

    标签: c# blazor


    【解决方案1】:

    Blazor 根本不“检测变量变化”。

    但是您可以轻松地使用异步渲染逻辑:

    //public void Meow()
      public Task Meow()
      {
        await Task.Delay(3000); // Cat takes a deep breath
        IsMeowing = true; // MEOW!!!!!!!
      }
    

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2018-09-26
      • 2020-09-16
      • 1970-01-01
      • 2019-09-12
      • 2018-12-15
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      相关资源
      最近更新 更多