domingo, 23 de janeiro de 2011

WPF com Splash Screen

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 éSplash Screen do Windows Live Writer 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 Splash Screen do Visual Studio 2010no 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.

public partial class MainWindow : Window { public MainWindow() { var splash = new SplashScreen("Splash.png"); splash.Show(false); splash.Close(TimeSpan.FromSeconds(3)); InitializeComponent(); } }

Como podemos ver, basta instanciar a classesplash 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