如何在Blazor Server应用程序的客户端上更新服务器端更改? [英] How to update server-side changes on the client side for Blazor Server app?

查看:213
本文介绍了如何在Blazor Server应用程序的客户端上更新服务器端更改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 ChangeValues 服务器端事件每5秒发生一次,但是在客户端,我只看到 number 变量的第一个值. 参见下面的代码

My ChangeValues server-side event occurs every 5 seconds but on client-side, I only see the first value of the number variable. See code below

@page "/"
<button class="btn btn-primary" @onclick="ChangeValues">Click me</button>
<b>@number</b>
@code {
    double number;
    private Random rnd = new Random();
    private System.Threading.Timer _timer;
    void ChangeValues()
    {
        number = rnd.NextDouble();
        Console.WriteLine(number);
    }
    private void DoWork(object state)
    {
        ChangeValues();
    }
    protected override async Task OnInitializedAsync()
    {
        _timer = new System.Threading.Timer(DoWork, null, TimeSpan.Zero, 
            TimeSpan.FromSeconds(5));
    }
}

推荐答案

使用计时器(将在另一个线程上触发)时,您必须使用Invoke调用StateHasChanged():

When you use a Timer (that will fire on another Thread) you have to call StateHasChanged() using Invoke:

private async void DoWork(object state)
{
    ChangeValues();
    await InvokeAsync(StateHasChanged);        
}

这篇关于如何在Blazor Server应用程序的客户端上更新服务器端更改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆