quarta-feira, 14 de setembro de 2011

Visual Studio 11 e .NET Framework 4.5 Developer Preview

Com o lançamento do Windows 8 Developer Previewbuild_logo ontem no evento //Build/ Windows a Microsoft mostrou porque é a número um em sistemas operacionais.

Mas um sistema operacional não é nada sem aplicativos e, diga-se de passagem, o Windows 8 já tem sua plataforma de desenvolvimento bem amparada.

É que junto com o lançamento a Microsoft também disponibilizou uma versão Preview do Visual Studio 11 e do .NET Framework 4.5.

Ainda é cedo para tirar conclusões e se tratando de uma versão Preview (pré beta) existem possibilidades de mudanças. A documentação da MSDN ainda não está 100% consistente, alguns links fazem referência a novidades do atual Framework 4 e é fácil se perder no que é novo ou não.

Mesmo assim acho que vale a pena dar um conferida. Então seguem os links interessantes:

Enjoy

domingo, 28 de agosto de 2011

WebClient com Timeout

Algum tempo atrás iniciei um projeto que precisava fazer requisições HTTP para páginas Web e tratar seu resultado. Dentre as alternativas para isso resolvi escolher o WebClient por ser bem simples e resolver o problema que eu tinha em mãos de forma bem prática.

WebClient client = new WebClient(); string reply = client.DownloadString("[Url]"); Console.WriteLine(reply);

Este classe conta também com vários métodos para tratamento de forma assíncrona bem como suporte a comandos menos comuns como STOR (utilizado em FTP).

Mas nem tudo deu tão certo. Durante o desenvolvimento acabei verificando que o site em questão podia demorar bastante tempo para responder e que esse era um comportamento padrão do mesmo. Ou seja, eu teria que tratar isto de alguma forma, esperando mais tempo pelo resultado da requisição HTTP.

Nesse momento praticamente me vi forçado a utilizar classes mais complexas como as derivadas de WebRequest e WebResponse por causa da falta de suporte a definição do tempo de Timeout na classe WebClient.

Resolvi dar mais uma espiada na 50355_154915967879761_4814825_ndocumentação do MSDN e vi que poderia resolver isso de forma bem fácil graças a orientação a objetos.

Bastou herdar a classe WebClient e fazer um override do método protected GetWebRequest. Ali mesmo pude definir o meu timeout. Basicamente assim:

protected override WebRequest GetWebRequest(Uri address) { var request = base.GetWebRequest(address); request.Timeout = 60;//Timeout que quiser. return request; }

Claro que esta é apenas uma amostra do que pode ser feito, mas num caso real é apropriado colocar este valor em uma propriedade ou até mesmo definir no construtor da sua classe. Minha implementação completa pode ser encontrada neste link: WebClientExtended.

Enjoy

domingo, 20 de fevereiro de 2011

Recursos do Windows 7 para WPF

Com a chegada do Windows 7 vários novos recursos foram disponibilizados aos desenvolvedores. Preview da janela,Aero Peak botões de controle na barra de tarefas e notificações diretamente no ícone.
Logo no lançamento do Windows 7 era bastante complicado, se perdia muito tempo aprendendo as novas API do SDK com wrappers para o WPF. Realmente perdíamos bastante tempo mesmo que fosse apenas pra colocar um botão no Preview da barra de tarefas.
Com a chegada do WPF 4 isso tudo ficou muito mais fácil. Através da propriedade TaskbarItemInfo da Window podemos ter acesso a esta grande API do Windows 7 e aprimorar ainda mais a experiência do usuário.
TaskbarItemInfo
Esta propriedade permite que possamos interagir com o ícone da nossa aplicação na barra de tarefas. As seguintes propriedades nos proporcionam essa facilidade:
  • Description: Descrição que aparecerá acima do Preview do Aero Peak.
  • Overlay: Define uma imagem que aparecerá na mesma posição do ícone da barra de tarefas. Isso nos permite mostrar informações mesmo quando a aplicação está no plano de fundo e o usuário está executando outras ações em outros programas.
  • ThumbnailClipMargin: Se não quisermos mostrar no Aero PeakPreview parcial do Video Player a visualização completa de nossa aplicação podemos definir através dessa propriedade qual parte deve ser mostrada no Preview.
    • ProgressState: Indica o estado da aplicação. Podemos definirVisual Studio após carregar um projeto esta propriedade de modo que avise o usuário que está sendo processada uma tarefa em tempo indeterminado, que ocorreu um erro ou a aplicação está parada e requer sua atenção.
    • ProgressValue: Utilizada quando se sabe o progresso de umaProgresso de Download no Internet Explorer atividade e se quer mostrar na barra de tarefas. É muito semelhante a um ProgressBar que não esteja sendo utilizado como Indeterminate.
    • ThumbButtonInfos: Aqui podemos colocar vários botões que,Botões de controle do Media Player através do Aero Peak, façam com que o usuário interaja com a aplicação mesmo ela estando no plano de fundo. Podem ser visualizados até 7 botões ao mesmo tempo.
    Fiz uma pequena aplicação conceito para aplicar tudo isso.Video Player Criei um Video Player que busca um vídeo via Streaming do Channel9. Utilizei o TaskbarItemInfo da seguinte forma:
    • Utilizei a barra de progresso na barra de tarefas para mostrar enquanto ainda está sendo feito buffer do vídeo.
    • Quando o vídeo começar a rodar coloco um Overlay na barra de tarefas semelhante a um botão Play.
    • Defini que no Preview do Aero Peak só mostraria a parte do vídeo e não os controles.
    • Adicionei um botão para fechar diretamente no Preview (eu sei, é redundante, mas é só pra mostrar o conceito).
    Para adicionar toda essa funcionalidade a minha aplicação não levei mais do que alguns minutos. Demora mais pra achar imagens legais e tal. Mas acho que deu pra entender a ideia. O XAML que tive que adicionar é o seguinte:
    <Window.TaskbarItemInfo> <TaskbarItemInfo x:Name="StatusTaskbarItemInfo" ProgressState="Indeterminate" Description="Video Player" ThumbnailClipMargin="15,54,17,75"> <TaskbarItemInfo.ThumbButtonInfos> <ThumbButtonInfo Description="Fechar" Click="ThumbButtonInfo_Click" ImageSource="...sua imagem aqui..."> </ThumbButtonInfo> </TaskbarItemInfo.ThumbButtonInfos> </TaskbarItemInfo> </Window.TaskbarItemInfo>
    O código do exemplo bem como uma aplicação pronta (ClickOnce) pode ser encontrados aqui.
    Enjoy