c# - 在 Blazor Web 程序集中每秒调用 StateHasChanged() 是最佳的吗?
问题描述
我正在开发一个blazor webassembly
应用程序。我需要DateTime
在我的应用程序中显示当前。以下是我如何使用 pure 实现我的要求C#
。
@using System.Threading
<p>@CurrentDateTime</p>
@code {
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
new Timer(DateTimeCallback, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1));
}
}
private void DateTimeCallback(object state)
{
CurrentDateTime = DateTimeOffset.UtcNow.ToString("dd MMM yyyy hh:mm:ss tt");
StateHasChanged();
}
}
这给出了准确的当前时间并每秒更新一次。但我有点担心StateHasChanged()
每一秒都打电话。从长远来看,它会影响性能吗?或者我需要回退来javascript
实现这个功能?请提出您的意见。
解决方案
但我有点担心每秒调用 StateHasChanged()。
不要这样。每一毫秒都可能是一个问题,每一秒都应该没问题。
一些改进:
System.Threading.Timer 是 IDisposable。您应该在此页面中实现 Dispose 逻辑。看到这个答案。
您应该先进行回调
async void
,然后await InvokeAsync(StateHasChanged);
这在目前的 WebAssembly 中没有任何区别,但是有一天 Blazor/Wasm 将获得真正的线程,然后您的代码将失败。Blazor/服务器已经需要 InvokeAsync()。
推荐阅读
- java - ThreadPoolExecutor 的 Spring 实时重载
- python - 训练期间的Pytorch MSE损失函数nan
- pytorch - 为什么 pytorch 转换器 src_mask 不阻止职位参加?
- java - 渲染精灵表的问题(像素未渲染并向左移动)
- java - 如何检查用户在android中使用intent创建的卸载对话框点击了什么?
- excel - 查找上方单元格的值
- nativescript - 目标入口点“chart-directives”中的错误缺少依赖项:-./../
- python - pandas,python中的数据解析
- c++ - 重写的函数没有反映在基类中,这是正常行为吗?
- javascript - 如何让一组 div 沿着屏幕移动。反应