计时器在 Blazor Web 应用程序中不起作用

问题描述 投票:0回答:1

我有简单的 Blazor Web 应用程序(服务器端、.NET 8、VS2022)。 这里是主页:

@page "/"
@using System.Timers
@rendermode InteractiveServer

<p>@StatusMessage</p>

<button class="btn btn-primary" @onclick="StartHandler">Start</button>

@code {
    private void StartHandler()
    {
        Countdown = 100;
        timerCounter.Interval = 1000;
        timerCounter.Elapsed += TimerCounter_Elapsed;
        timerCounter.AutoReset = true;
        timerCounter.Start();
    }
    private void TimerCounter_Elapsed(object? sender, ElapsedEventArgs e)
    {        
        Countdown--;
        StatusMessage = $"{Countdown}";
    }

    private Timer timerCounter = new Timer();
    private int Countdown = 0;    
    private string StatusMessage = "";
}

它应该在单击按钮时启动计时器并在页面上显示倒计时。 但当我点击按钮时什么也没发生。 下次点击时,它会显示 99 或 97 等计数。 我不明白发生了什么事。 为什么计时器事件不触发? 谢谢。

我尝试了单击按钮的倒计时,它有效。 但我需要计时器触发事件。

这是我的 App.razor 文件:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <base href="/" />
    <link rel="stylesheet" href="bootstrap/bootstrap.min.css" />
    <link rel="stylesheet" href="app.css" />
    <link rel="stylesheet" href="BlazorApp.styles.css" />
    <link rel="icon" type="image/png" href="favicon.png" />
    <HeadOutlet />
</head>

<body>
    <Routes />
    <script src="_framework/blazor.web.js"></script>
</body>

</html>
c# blazor-server-side
1个回答
0
投票

添加

StateHasChanged
。文档中:“通知组件其状态已更改。适用时,这将导致组件重新渲染。”

private void TimerCounter_Elapsed(object? sender, ElapsedEventArgs e)
{        
    Countdown--;
    StatusMessage = $"{Countdown}";
    StateHasChanged();        
}
© www.soinside.com 2019 - 2024. All rights reserved.