【发布时间】:2021-12-22 15:12:16
【问题描述】:
我正在使用 Blazor Webassembly 模板,特别是天气预报页面。
我只是添加了一个计时器并有一个增加变量的函数,该函数显示在页面上。我没有得到的是, addText 函数从未被专门调用,但变量随着计时器的经过而不断增加。所以我不明白这里发生了什么。
有人可以启发我吗? html 区域内的所有函数都在 StateHasChanged() 上调用吗?如果我将 html 中的行更改为 '@((MarkupString)sometext.ToString())',它不会增加。代码如下:
<h1>Weather forecast</h1>
<p>This component demonstrates fetching data from the server.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
<br />
@((MarkupString)addText())
}
@code {
private WeatherForecast[] forecasts;
private int sometext = 0;
Timer timer;
protected override async Task OnInitializedAsync()
{
timer = new Timer();
timer.Interval = 1000;
timer.Elapsed += TimerOnElapsed;
timer.Start();
forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");
}
private void TimerOnElapsed(object sender, ElapsedEventArgs e)
{
StateHasChanged();
}
private string addText()
{
return sometext++.ToString();
}
}
【问题讨论】:
标签: timer blazor webassembly