我有以下問題:
我有一個前端,其中某些值由后端設定。值保存在串列中,這些串列元素應顯示在前端。
這在第一次加載時有效,在手動重繪 頁面等...但在使用 StateHasChanged() 或 ShouldRender() 時無效
在搜索時我發現了這篇文章: Blazor Timer call async API task to update UI
所以我添加了Timer,Timer確實在重繪 ,但只有30秒左右,之后就不會再重繪 了。
<ul>
@Time
</ul>
System.Threading.Timer timer;
private string Time { get; set; }
protected override async Task OnInitializedAsync()
{
_servers = DataCollection.srv;
var timer = new System.Threading.Timer((_) =>
{
Time = DateTime.Now.ToString();
InvokeAsync(() =>
{
StateHasChanged();
});
}, null, 0, 1000);
base.OnInitialized();```
當計時器重繪 時,所有其他元素也將被重繪 。但是重繪 計時器會隨機停止,有時在 60 秒后,有時在 2 秒后。單擊一個按鈕(默認情況下會觸發重繪 )或任何操作都不會再次啟動它。
我的問題是:為什么它只能在隨機的時間內起作用?
感謝您的寶貴時間,如果這可能是微不足道的,我們深表歉意
uj5u.com熱心網友回復:
<ul>
@Time
<button onclick="@Collect">Collect</button>
</ul>
@code {
System.Threading.Timer timer;
private string Time { get; set; }
protected override async Task OnInitializedAsync()
{
var timer = new System.Threading.Timer((_) =>
{
Time = DateTime.Now.ToString();
InvokeAsync(() =>
{
StateHasChanged();
});
}, null, 0, 1000);
base.OnInitialized();
}
void Collect()
{
GC.Collect();
}
}
在https://try.mudblazor.com/snippet上嘗試上述代碼。由于您將 Timer 分配給方法范圍內的區域變數,因此最終會對其進行垃圾收集,并且您的計時器將不再觸發。您可以使用上面的示例進行模擬,其中我引入了一個按鈕來顯式觸發垃圾收集。更改示例以分配給計時器變數而不是本地 var 計時器變數并嘗試再次觸發垃圾收集,并且計時器這次不會停止。
uj5u.com熱心網友回復:
這是我基于您的代碼的測驗頁。它用于Task.Delay模擬您的
_servers = DataCollection.srv;. 它不會在 30-60 秒后凍結。
這表明 中存在問題_servers = DataCollection.srv;。在您的代碼中更改此行await Task./Delay(100)并驗證問題是否存在。
@page "/"
<PageTitle>Index</PageTitle>
<div class="p-2">
@this.Time
</div>
@code {
System.Threading.Timer? timer;
private string Time { get; set; } = string.Empty;
protected override async Task OnInitializedAsync()
{
// emulate a data get
await Task.Delay(100);
var timer = new System.Threading.Timer((_) =>
{
Time = DateTime.Now.ToString();
InvokeAsync(() =>
{
StateHasChanged();
});
}, null, 0, 1000);
await base.OnInitializedAsync();
}
}
另外你為什么打電話base.OnInitialized();來OnInitializedAsync()?
它已經運行:OnInitialized()由ComponentBasebefore呼叫OnInitializedAsync()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444895.html
