InvokeAsync 與 StateHasChanged 非同步刷新UI問題 (MessageBus 應用)

Blazor Comonent 的 StateHasChanged() 在 Message Bus 觸發 UI render 無效問題解決。BlazorComponentBus,MessageBus.

引言

Blazor Component UI 的刷新一般用 StateHasChanged() 觸發就行,但在 Message Bus 的應用 StateHasChanged 會無效!

在 Message Bus 的應用若要顯示訊息一般用 toast (或 snackebar) 模組,這機制都能如期運作。然有時也有呈現在主頁面的需求,這時卻會無效。研究後,Message Bus 的通訊一般是採用訂閱(subscription)機制,這方法在主頁面回饋時訊息是有如實送到的,但畫面刷新用 StateHasChanged() 觸發無效!推論是其領域(domain)不同所以訊息銜接(context)到另一個時空去了。

解決方法

ComponentBase.InvokeAsync 函式就能再銜結回主頁面。

先下結論

若 StateHasChanged 無效的話就用:

關鍵程式碼紀錄

本案例的 Message Bus 採用 BlazorComponentBus 元件實作,也是用訂閱機制通訊。

沒圖沒真象

參考文章

Last updated