20行代码写一个简单 Blazor 时钟组件

群里有些同学询问怎么实现定时刷新界面, 那咱们写点试试看能不能达到需求.
代码比较简单, 就是Task每秒刷新页面. 然后封装为组件实现只局部刷新.

Demo

TimerAme.razor
<p>@Label @DateTime.Now.ToLongTimeString()</p>
TimerAme.razor.cs
using Microsoft.AspNetCore.Components;

public partial class TimerAme : ComponentBase, IDisposable
{
    [Parameter]
    public string Label { get; set; } = "时间:";

    private CancellationTokenSource? AutoRefreshCancelTokenSource { get; set; }

    protected override void OnInitialized() => worker();

    /// <summary>
    /// Dispose 方法
    /// </summary>
    public void Dispose() => AutoRefreshCancelTokenSource = null;

    public void worker()
    {
        AutoRefreshCancelTokenSource = new CancellationTokenSource();
        _ = Task.Run(async () =>
        {
            try
            {
                while (!(AutoRefreshCancelTokenSource?.IsCancellationRequested ?? true))
                {
                    await InvokeAsync(StateHasChanged);
                    await Task.Delay(TimeSpan.FromSeconds(1), AutoRefreshCancelTokenSource?.Token ?? new CancellationToken(true));
                }
            }
            catch (TaskCanceledException) { }
        });

    }
}
使用组件
<TimerAme />
以下是一个基于C语言的模拟时钟代码,共计超过300: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> // 定义时钟结构体 typedef struct clock { int hour; int minute; int second; } Clock; // 根据当前时间初始化时钟 void initClock(Clock *clock) { time_t currentTime; struct tm *localTime; time(&currentTime); localTime = localtime(&currentTime); clock->hour = localTime->tm_hour; clock->minute = localTime->tm_min; clock->second = localTime->tm_sec; } // 显示时钟 void showClock(Clock *clock) { printf("\r%02d:%02d:%02d", clock->hour, clock->minute, clock->second); } // 更新时钟 void updateClock(Clock *clock) { clock->second++; if (clock->second == 60) { clock->second = 0; clock->minute++; if (clock->minute == 60) { clock->minute = 0; clock->hour++; if (clock->hour == 24) { clock->hour = 0; } } } } // 主函数 int main() { Clock clock; initClock(&clock); while (1) { showClock(&clock); updateClock(&clock); Sleep(1000); } return 0; } ``` 这个时钟程序基于Windows系统,使用了Windows API中的Sleep函数,每隔1秒钟更新一次时钟。使用了time.h头文件中的time和localtime函数,获取了当前系统时间,并根据当前时间初始化了时钟。程序使用了结构体来存储时钟时间,方便后续的操作。程序中定义了三个函数:initClock用于初始化时钟,showClock用于显示时钟,updateClock用于更新时钟。程序中使用了循环语句来不断更新时钟,并使用了递增运算符来实现时钟的自动更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Densen2014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值