C#, Webcast, WPF

Meu webcast no Virtual Developer Day 2011: A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5)

No dia 30/01/2011, eu apresentei o Webcast A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4, 5) no Virtual Developer Day 2011, evento organizado pela comunidade .NET Interior com apoio da Microsoft – CEA/MSDN, Silverlight Brasil, Silverlight Planet e Codificando.NET.

O objetivo da apresentação foi dar uma visão geral da evolução da linguagem C# desde a versão 1.0 até a atual (versão 4) e do futuro da linguagem (versão 5), que por enquanto está em fase de desenvolvimento pela Microsoft.

A apresentação teórica

Segue a relação de slides da apresentação teórica do Webcast:

  • Evolução da linguagem C#
  • C# 1.0 (Fev 2002)
  • C# 2.0 (Nov 2005)
  • C# 3.0 (Nov 2007)
  • C# 4 (Abr 2010)
  • Programação síncrona
  • Demonstração de programação assíncrona
  • Asyncronous Programming Model (APM)
  • Event-based Asynchronous Pattern (EAP)
  • Task-based Asynchronous Pattern (TAP)
  • Visual Studio Async CTP (disponibilizado no PDC em 28/10/2010)
  • C# 5 (2012?)
  • Demonstração async e await
  • Contatos

Slides da apresentação

Demonstrações

A ideia era fazer uma apresentação com 3 demonstrações. Porém, o tempo somente possibilitou a realização de duas demonstrações.

Na primeira demonstração, eu criei toda a infraestrutura de uma biblioteca de classes e de uma aplicação WPF para mostrar informações sobre os resultados dos ganhadores na MEGA-SENA, consumindo as informações de uma página da Caixa. Esta primeira demonstração era síncrona e compatilhava a Thread de interface com o usuário (UI Thread) para consultar as informações do resultado de um concurso específico da MEGA-SENA no site da Caixa. Deste modo, a interface com o usuário ficava congelada, sem atualização e resposta ao usuário, até que todo o processamento de análise dos ganhadores fosse concluído. Veja o fragmento da versão assíncrona do código do método de manipulação do evento Click do botão de análise dos ganhadores na MEGA-SENA.

private void buttonAnalisar_Click(object sender, RoutedEventArgs e) {
	ultimoGanhadorMegaSena = null;

	int numeroConcursoFinal = int.Parse(textBoxNumeroConcursoFinal.Text);

	listBoxResultadoAnalise.Items.Clear();
	progressBar.Visibility = Visibility.Visible;
	progressBar.Value = 0;
	progressBar.Maximum = numeroConcursoFinal;
	buttonAnalisar.IsEnabled = false;

	WebClient clienteWeb = new WebClient();

	for (int numeroConcurso = 1; numeroConcurso <= numeroConcursoFinal; numeroConcurso++) {
		string resultado = clienteWeb.DownloadString("http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_pesquisa_new.asp?submeteu=sim&opcao=concurso&txtConcurso=" + numeroConcurso);

		MegaSenaComGanhador megaSenaComGanhador = recuperarInfoMegaSenaComGanhador(resultado);

		if (megaSenaComGanhador != null) {
			ultimoGanhadorMegaSena = megaSenaComGanhador;
			listBoxResultadoAnalise.Items.Add(megaSenaComGanhador.ToString());
			listBoxResultadoAnalise.ScrollIntoView(megaSenaComGanhador.ToString());
		}

		progressBar.Value = numeroConcurso;
	}

	buttonAnalisar.IsEnabled = true;
	progressBar.Visibility = Visibility.Hidden;
}

Na segunda demonstração, foram usadas as novas palavras-chaves async e await do C# 5 para transformar o código para a forma assíncrona com um mínimo de quebra da lógica de programação em relação à forma síncrona.

private async void buttonAnalisar_ClickAsync(object sender, RoutedEventArgs e) {
	ultimoGanhadorMegaSena = null;

	int numeroConcursoFinal = int.Parse(textBoxNumeroConcursoFinal.Text);

	listBoxResultadoAnalise.Items.Clear();
	progressBar.Visibility = Visibility.Visible;
	progressBar.Value = 0;
	progressBar.Maximum = numeroConcursoFinal;
	buttonAnalisar.IsEnabled = false;

	WebClient clienteWeb = new WebClient();

	for (int numeroConcurso = 1; numeroConcurso <= numeroConcursoFinal; numeroConcurso++) {
		string resultado = await clienteWeb.DownloadStringTaskAsync("http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_pesquisa_new.asp?submeteu=sim&opcao=concurso&txtConcurso=" + numeroConcurso);

		MegaSenaComGanhador megaSenaComGanhador = recuperarInfoMegaSenaComGanhador(resultado);

		if (megaSenaComGanhador != null) {
			ultimoGanhadorMegaSena = megaSenaComGanhador;
			listBoxResultadoAnalise.Items.Add(megaSenaComGanhador.ToString());
			listBoxResultadoAnalise.ScrollIntoView(megaSenaComGanhador.ToString());
		}

		progressBar.Value = numeroConcurso;
	}

	buttonAnalisar.IsEnabled = true;
	progressBar.Visibility = Visibility.Hidden;
}

Código-fonte das demonstrações

Código-fonte das demonstrações realizadas como o Visual Studio 2010 RTM e com o Visual Studio Async CTP (disponibilizado em 28/10/2010 no PDC) instalado:
Solução MegaSena do Visual Studio 2010 RTM

Veja informações sobre o Visual Studio Async CTP nos slides.

Abaixo, segue uma figura da tela da aplicação WPF de demonstração para análise dos ganhadores na MEGA-SENA.

Tela da aplicação de análise de ganhadores na MEGA-SENA

4 comentários sobre “Meu webcast no Virtual Developer Day 2011: A evolução e o futuro da linguagem C# (1.0, 2.0, 3.0, 4 e 5)

  1. Olá Antonio!

    Na realidade, eu havia entrado antes do dia do evento para fazer alguns testes. Certamente, a gravação foi deste teste que eu fiz. No dia da minha apresentação, eu fiquei envolvido com perguntas dos participantes pelo Twitter, com o upload da apresentação, teste de microfone e teste de compartilhamento de desktop. Quando eu percebi, já estava no hora de começar a apresentação. Deste modo, eu acabei esquecendo de fazer a gravação. Quando eu lembrei, já estava no meio do Webcast.

    Portanto, infelizmente não realizei a gravação do Webcast!😦

  2. Amigo, boa tarde!

    Teria como colocar no ar o link do projeto da Mega Sena? Realmente estou interessado em analisá-lo!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s