Blazor Server 使用计时器定期更新图像

Blazor Server Periodic update of images using a timer

抱歉这个基本问题。

在使用 Blazor Server 创建的网页上粘贴并显示图像。

我想定期更新这张显示的图片。 (例如,每秒更新一次)

此图像存储在位置 wwwroot / imageFiles 中,名称为 PreviewImage.bmp。

具体来说,我想在替换这个wwwroot/imageFiles下的PreviewImage.bmp时,将网页显示的图片切换为替换后的图片。

例如,当我将显示狗的PreviewImage.bmp更改为显示猫的PreviewImage.bmp时,我想切换网页上显示的图像。

我想知道是否可以使用StateHasChanged()更新图像;有一个计时器,但这没有用。

<img src="@previewImg" />

@code{
    
    private string previewImg = string.Empty;
    private Timer timer = new(1000);

    protected override void OnInitialized()
    {
        previewImg = @"imageFiles/PreviewImage.bmp";

        timer.Elapsed += (sender, eventArgs) => OnTimerCallback();
        timer.AutoReset = true;
        timer.Start();            
    }

    private void OnTimerCallback()
    {    
        _ = InvokeAsync(() =>
       {    
         previewImg = @"imageFiles/PreviewImage.bmp";
         StateHasChanged();
       });
    }
 }

但是,如果您使用 F5 键重新加载整个页面,图像将会更新。

有没有办法实现这个图片更新?

对不起,内容很难理解。

感谢您的建议。

尝试在文件名后添加一个垃圾查询,例如:

previewImg = @"imageFiles/PreviewImage.bmp" + "?DummyId=" + DateTimeNow.Ticks;

试试这个

protected override void OnInitialized()
{
    var timer = new System.Threading.Timer(_ =>
    {    
        InvokeAsync( async ()  =>
        {
            previewImg = @"imageFiles/PreviewImage.bmp";
            StateHasChanged();
        });
    }, null, 0, 1000);

}