Как обновить изменения на стороне сервера для приложения Blazor Server? - PullRequest
0 голосов
/ 30 сентября 2019

My ChangeValues ​​ событие на стороне сервера происходит каждые 5 секунд, но на стороне клиента я вижу только первое значение переменной number . Смотрите код ниже

@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 Ответ

1 голос
/ 30 сентября 2019

Когда вы используете таймер (который запускается в другом потоке), вы должны вызывать StateHasChanged () с помощью Invoke:

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