如何检查 .net core blazor 应用程序中是否加载了所有组件?

Jus*_*tin 5 .net c# blazor

假设我想知道我的所有组件何时加载,以便我可以执行 X 操作。

在我的MainLayout.razor例子中我有这个

@inject MyService;

@Body

bool AllComponentsAreLoaded { get; set; }

protected override async Task OnInitializedAsync()
{
    AllComponentsAreLoaded = false;
}

 protected override async Task OnAfterRenderAsync(bool firstrender)
 {
     AllComponentsAreLoaded = true;
     if (AllComponentsAreLoaded)
     {
         // Nice I can start X
     }
 }
Run Code Online (Sandbox Code Playgroud)

这段代码可以工作,但我的问题是其中有一些组件@Body未加载。将会OnAfterRenderAsync触发,但它会在所有组件完成渲染之前触发。

我如何知道所有组件都已完成渲染?

Dan*_*Dan 2

为此,您可以使用“NotifierService”,将其注入到每个组件可以调用的启动中(以下链接中的示例)。

https://learn.microsoft.com/en-us/aspnet/core/blazor/components?view=aspnetcore-3.1

例如,每个组件都会向该服务发送通知,让其知道它是否已加载。然后,主要的“主体”将在完成时收到通知(您必须在这里实现自己的逻辑)。