【发布时间】:2020-07-03 01:46:57
【问题描述】:
我目前正在处理一个 Blazor 项目并面临一个错误。计划是每秒更新一个组件,只要 for 循环更新。我的问题有点复杂,所以我在另一个项目中重现了这个bug:
进行计算的Calculate.cs文件:
public class Calculate
{
public void Calc(Index index)
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
index.Update(i);
}
}
}
index.razor 文件:
<button class="btn btn-primary" @onclick="Test">Click me</button>
<p>Test number: @testNumber</p>
@code
{
private int testNumber;
Calculate c = new Calculate();
public void Test()
{
c.Calc(this);
}
public void Update(int i)
{
testNumber = i;
Debug.WriteLine(i);
}
}
测试后,调试控制台每秒打印数字,从 0 到 9,但打开的 Blazor 显示只打印 9,只要计算和 10 秒结束。
【问题讨论】:
-
我不完全确定您当前的设计要达到什么目的。但是,在现实世界的应用程序中,您应该将 Calculate 类设置为可以注入到组件中的服务,并且该服务可以实现状态模式和通知模式。一般来说,你的服务为你的组件提供计算等服务,当它们准备好时,它应该调用一个事件委托来通知订阅者该事件,并在必要时将事件参数传递给他们,例如计算结果。
-
你当然不能将组件的实例传递给一个类,以便它可以调用组件的方法。再次,公开事件。这就是我们多年来编码的方式。
标签: c# .net razor blazor blazor-server-side