How to update server-side changes on the client side for Blazor Server app?

痞子三分冷 提交于 2020-01-13 07:13:03

问题


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));
    }
}

回答1:


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);        
}


来源:https://stackoverflow.com/questions/58166454/how-to-update-server-side-changes-on-the-client-side-for-blazor-server-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!