Réduire le temps de démarrage perçu avec System.Windows.SplashScreen

La nouvelle classe System.Windows.SplashScreen du framework .NET 3.5 SP1 permet d'afficher très rapidement et avec une grande facilité un écran d'accueil lors du démarrage de vos applications WPF. Ceci permet de réduire le temps de démarrage perçu par l’utilisateur en lui offrant un feedback quasi instantané. Pour utiliser une image en tant que splash screen avec Visual Studio 2008 SP1 :

- Ajouter une image existante à votre projet
clip_image002

- Modifier les propriétés de cette image (clic droit, Propriétés) en donnant à la propriété Build Action la valeur Splash Screen
clip_image004

- Recompilez, et lancez l’application pour voir l’image sélectionnée s’afficher au démarrage.
  Il vous suffira de mettre la Build Action à Resource pour supprimer l'affichage de l'image au démarrage.

Vous pouvez à tout moment réafficher le splash screen par le biais du code suivant

SplashScreen appSplash = new SplashScreen("msdotnet.png");
appSplash.Show(false);
appSplash.Close(TimeSpan.FromSeconds(0.5)); // fondu de sortie en 0.5s

Il est conseillé d’utiliser des images au format PNG (Portable Network Graphics) car ce format permet d’obtenir un bon taux de compression sans perte de qualité, et gère également canal alpha (transparence). Dans sa version actuelle, SplashScreen n'autorise que les images statiques : les fichiers GIF animés ne sont pas supportés, et il n’est pas possible d’effectuer des modifications sur l’image affichée au runtime.

Détails pour les curieux :
Il était bien entendu possible de faire un splash screen plus sophistiqué et plus paramétrable en pur WPF, mais celui-ci aurait forcément été managé : l’écran n'aurait pu apparaître qu'après le (couteux) chargement des assemblies .NET. La nouvelle classe SplashScreen et son build action associé permettent de réduire le temps de démarrage perçu de l’application en affichant le splash screen de manière native, ce qui permet à l’image de s’afficher à l’écran avant même que les assemblies managés .NET ne soient chargées en mémoire.

SplashScreenWpf.zip