Warning : This page has been marked as an archive because the author consider that its content is no longer relevant.

Dans WinRT on sait que le système peut passer une application en mode Suspending. Ce que l’on ne sait pas en revanche c’est au bout de combien de temps le système va décider à le faire. Lorsque l’utilisateur fait un Alt+Tab pour changer d’application active le système peut mettre une dizaine de secondes à passer une application metro en Suspending. Dans la plupart des cas ce n’est pas quelquechose dont on a à se préoccuper cependant dans le cas d’un jeu par exemple, ou un compteur de temps existe, il est très important de savoir exactement lorsque l’utilisateur fait un Alt+Tab pour mettre en pause ce compteur. Aussi je vous propose ici une solution simple que j’ai mis en place dans mon application.

Dans le fichier App.xaml.cs de l’application, à la fin de l’évènement OnLauching (le temps que la Window soit créée), abonnez-vous à l’évènement VisibilityChanged de la fenêtre courante :

Window.Current.VisibilityChanged += WindowVisibilityChanged;

Dans le gestionnaire de cet évènement ajoutez un code similaire à celui-ci :

private async void WindowVisibilityChanged(object sender, VisibilityChangedEventArgs e)
{
    if (e.Visible == false)
    {
        await SaveCurrentGameIfNeededAsync();
    }
    else
    {
        await RestoreGameIfNeededAsync();   
    }
}

Les méthodes SaveCurrentGameIfNeededAsync et RestoreGameIfNeededAsync sont aussi utilisées dans les gestionnaires des évènements OnSuspending et OnResuming pour bien faire et déterminent si la sauvegarde ou la restauration de l’état du jeu à déjà été faite ou non.

Et voilà c’est tout, ainsi plus de timers qui tournent dans le vide.

Comments