Desde sempre estamos acostumados a aplicações que precisam de um tempo de espera relativamente grande para iniciar. Isso aconteceu e ainda acontece com aplicações WIN32 que ao iniciarem precisam de uma grande quantidade de arquivos carregados na memória.
Já se foi o tempo onde o .NET era muito lento para carregar. Época em que tínhamos computadores com menos de 1GB de RAM e apenas um processador e núcleo com menos de 1GHz. Não me refiro a aplicação rodando mas sim o tempo que demorava para carregar na memória as DLL do Framework e aplicação num Cold Start. Mas mesmo assim, hoje ainda não é instantâneo.
Uma solução que aumenta a experiência do usuário é a utilização de um Splash Screen, efeito muito utilizado por vários tipos de aplicações: Adobe Photoshop, NetBeans, Visual Studio, Windows Live Writer são alguns exemplos.
Hoje vou mostrar como colocar um Splash Screen no WPF fazendo com a resposta ao usuário ao chamar a aplicação seja praticamente imediata.
Desde a versão do Framework 3.5 SP1 existem 3 opções para se criar um Splash Screen no WPF. Em todas elas devemos lembrar que as imagens deve ser suportadas pelo Windows Imaging Component (WIC) e isso inclui: BMP, GIF, JPEG, PNG e TIFF.
Se você utilizar uma imagem PNG com transparência ela será mostrada no Splash Screen com transparência. Se utilizar um GIF animado só será mostrado o primeiro frame.
Opção 1: Adicionando o item SplashScreen
Com certeza esta é a opção mais simples.
- No menu de contexto do seu projeto selecione a opção Add e depois New Item.
- Selecione o item SplashScreen (WPF) e escolha um nome para o mesmo.
- Rode a aplicação e veja como ficou a imagem padrão de Splash Screen.
Opção 2: Utilizando uma imagem com Build Action SplashScreen
A segunda opção não consiste em algo tão mais complexo do que o item SplashScreen, na verdade se utiliza o mesmo recurso utilizado por ele, uma imagem que tem definido seu Build Action como SplashScreen.
- No menu de contexto do seu projeto selecione a opção Add e depois Existing Item.
- Selecione uma imagem que queira que apareça enquanto a sua aplicação está fazendo o carregamento mais pesado.
- Vá na aba das propriedades desta imagem e configure o Build Action para SplashScreen.
- Rode a aplicação e veja como ficou a imagem selecionada como Splash Screen da sua aplicação.
Opção 3:Utilizando as APIs de SplashScreen
Podemos utilizar a API de SplashScreen através da classe de mesmo nome.
Não existem passos mágicos a seguir, apenas devemos prestar atenção que a imagem que quisermos utilizar deve ter seu Build Action configurado para Resource.
Como podemos ver, basta instanciar a classe SplashScreen passando o caminho do Resource.
Depois chamamos o método Show para mostrar a imagem e informamos que a mesma não deverá ser fechada automaticamente.
Por fim definimos através do método Close que após 3 segundos ela sofrerá um efeito fade out e fechará.
O Splash Screen em si não faz a aplicação ficar mais rápida para abrir, mas como faz uso do Windows Imaging Component (WIC) ele mostra a imagem muito antes da aplicação carregar. Com isso melhora a experiência do usuário com a sua aplicação.
Enjoy