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);
}
抱歉这个基本问题。
在使用 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);
}