Maison > développement back-end > C++ > Comment afficher un spinner lors des appels API de longue durée dans Blazor ?

Comment afficher un spinner lors des appels API de longue durée dans Blazor ?

Patricia Arquette
Libérer: 2024-12-28 10:53:10
original
912 Les gens l'ont consulté

Affichage d'une attente ou d'un spinner pendant les appels d'API dans Blazor

Blazor vous permet d'afficher des commentaires à l'utilisateur pendant des appels d'API de longue durée à l'aide d'indices visuels tels que des curseurs d'attente ou des images de spinner.

Problème :

Dans votre application Blazor, vous avez tenté d'utiliser CSS pour afficher un curseur tournant lors des appels API. Cependant, le contenu de la page n'a pas été actualisé jusqu'à la fin de l'appel.

Solution :

Option 1 : Utilisation de Task.Delay(1)

  • Créez une méthode asynchrone.
  • Utilisez wait Task.Delay(1) ou wait Task.Yield(); pour forcer la mise à jour de l'interface utilisateur avant la fin de l'appel de l'API.
private async Task AsyncLongFunc()    // this is an async task
{
    spinning=true;
    await Task.Delay(1);      // flushing changes. The trick!!
    LongFunc();               // non-async code
    currentCount++;
    spinning=false;
    await Task.Delay(1);      // changes are flushed again    
}
Copier après la connexion

Option 2 : utilisation de Task.Run() (pas pour WebAssembly)

  • Si votre méthode LongOperation() n'est pas asynchrone, placez-la dans une tâche et attendez-la en utilisant Task.Run().
async Task AsyncLongOperation()    // this is an async task
{
    spinning=true;
    await Task.Run(()=> LongOperation());  //<--here!
    currentCount++;
    spinning=false;
}
Copier après la connexion

Effet

How to Display a Spinner During Long-Running API Calls in Blazor?

Remarque concernant le prérendu côté serveur :

Dans les applications Blazor Server, le spinner n'apparaîtra pas en raison du prérendu. Pour le rendre visible, effectuez l'opération longue dans OnAfterRender.

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender)
    {           
        await Task.Run(()=> LongOperation());//<--or Task.Delay(0) without Task.Run
        StateHasChanged();
    }
}
Copier après la connexion

Pour plus d'exemples et d'informations, reportez-vous aux projets open source comme BlazorPro.Spinkit.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal