Loupe

[QuickN’ Tip] “Attendre” la fin de l’exécution d’un Storyboard

Aujourd’hui encore, je vous propose une astuve simple mais efficace, pour vous permettre “d’attendre” (grâce au mot clé await) le fin de l’exécution d’un Storyboad.

En effet, les Storyboards possèdent un évènement Completed qui est déclenché lorsque l’animation est terminée. L’inconvénient de cet évènement, c’est qu’il nous oblige à retrouver ce bon vieux code “spaghetti” avec un abonement à un évènement, le gestionnaire d’évènement définit en dessous, etc.

Du coup, je vous propose cette petite méthode d’extension:

public static class StoryboardsExtensions
{
    public static Task BeginAsync(this Storyboard storyboard)
    {
        var tcs = new TaskCompletionSource<bool>();

        EventHandler completedEventHandler = null;
        completedEventHandler = (sender, o) =>
        {
            storyboard.Completed -= completedEventHandler;
            tcs.TrySetResult(true);
        };
        storyboard.Completed += completedEventHandler;
        storyboard.Begin();

        return tcs.Task;
    }
}

Au niveau de l’utilisation, c’est très simple:

await storyboard.BeginAsync();

Et le tour est joué ! :)

 

Comme vous pouvez le voir, il ne s’agit pas de quelque chose d’extraordinaire mais une simple astuce qui, je l’espère, pourra vous faire gagner du temps ;)

 

Happy coding!

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus