De que se trata o artigo

O artigo mostra um recurso em aplicações Windows Forms e WPF para executar trabalhos em segundo plano. Considera as alternativas de implementação de multitarefas existentes em comparação com o componente BackgroundWorker. Também mostra alternativas para utilizar controles do Windows Forms que não são inicialmente suportados por aplicações WPF.

Em que situações o tema é útil

Multitarefas em aplicações Windows são essenciais quando se deseja criar um programa mais interativo e que não congele aparentemente quando estiver executando operações demoradas. O componente BackgroundWorker é importante nestes casos porque simplifica a criação deste tipo de funcionalidade sem que seja necessário para o desenvolvedor lidar com questões muito complicadas de threads no Windows.

Implementando multitarefas com aplicações Windows Client

Aplicações Windows Client, isto é, aquelas que são desenvolvidas para serem executadas localmente, em vez de em um browser, precisam de um alto grau de interatividade com o usuário e consumo de processamento da máquina local (usuário). Operações longas como buscas em um banco de dados ou pelo sistema de arquivos são exemplos típicos onde aparentemente o programa pode aparentar não estar fazendo nada. Nestes casos, é necessário desenvolver meios de que o usuário perceba que algo está acontecendo e se possível, cancelar a operação.

Há suporte para multitarefa no .NET Framework desde as versões iniciais, mas, quase sempre é muito difícil implementar. Entre os controles que se propõem a simplificar este trabalho, o BackgroundWorker merece destaque por ser o que oferece mais recursos e é mais simples de se lidar.

Por outro lado, este controle também pode ser usado com aplicações WPF, que é a nova plataforma da Microsoft para aplicações baseadas no desktop. Para mostrar como interagir com este recurso, será demonstrada uma aplicação em WPF que faz uso deste componente.

Desde as versões iniciais, o C# oferece suporte a multitarefas principalmente através do uso da classe System.Threads.Thread e seus recursos. É possível implementar, com algum trabalho, códigos para dividir as tarefas. A principal motivação para isto é que os computadores existentes nos dias atuais são desenvolvidos para executarem um maior número de processos simultaneamente.

Desde a multitarefa preemptiva em que cada tarefa recebia um ciclo de tempo de computador até os computadores com vários núcleos, a necessidade de executar mais código simultaneamente permanece forte e quando se está usando um programa executado no Desktop esta necessidade é mais forte ainda.

Acontece que nenhum usuário gosta da ampulheta do Windows ou, ver a janela da sua aplicação esbranquiçar e o Windows escrever “Não está respondendo...”.

Para evitar este comportamento da aplicação e consequente irritação do usuário, é importante conhecer os recursos do .NET Framework para implementar multitarefas. As principais classes para isso são System.Threading.Thread, System.Timers.Timer e System.ComponentModel.BackgroundWorker.

Cada uma possui recursos para controlar o início, término e cancelamento de um trabalho executado em segundo plano. O mais interessante para desenvolvedores de aplicações Desktop com certeza é o BackgroundWorker pois é o que permite implementar multitarefas de uma maneira mais simples e clara.

O seu uso com aplicações Windows Forms é bastante facilitado graças a possibilidade de arrastar este controle para o design gráfico e configurar suas principais propriedades visualmente. Contudo, há algum tempo já vem tomando força e adoção por parte dos desenvolvedores outra plataforma para aplicações Windows conhecida como Windows Presentation Foundation (WPF).

Neste artigo, será apresentada uma introdução sobre os principais problemas a serem resolvidos com o trabalho de multitarefas e em seguida, através de uma aplicação de exemplo, será mostrado como integrar o controle BackgroundWorker em uma aplicação WPF.

Thread

Thread é uma classe do namespace System.Threading. Esta possui elementos para que uma tarefa seja executada em segundo plano liberando assim, o fluxo do programa para executar outras tarefas, como por exemplo, apresentar dados para o usuário ou aguardar algum comando seu.

Um esquema bom para entender o funcionamento de multitarefa é usar um fluxo onde o trabalho paralelo ocorre ao mesmo tempo que outros. A Figura 1 pode ser usada para isto.

Figura 1. Esquema de tarefas paralelas

Considere cada retângulo como uma porção de código a ser executado. Cada com um seu fluxo próprio de dados, cada um com seus blocos lógicos e tratamentos que precisam ser feitos.

O que o Framework faz quando uma instância da classe Thread é chamada e configurada para executar um determinado trabalho, é providenciar métodos e propriedades para o gerenciamento destes.

...
Quer ler esse conteúdo completo? Tenha acesso completo