Desenvolvimento de Aplicações Distribuídas - 2019/2020

1º Ano, 1º Semestre

MEIC - Campus Alameda
MEIC - Campus Tagus Park
METI - Campus Tagus Park

Aula nº 2 - Programação Baseada em Eventos


Material de apoio:


A - Delegates

Estude e execute o exemplo exercicio-1.cs. Modifique o exemplo como achar necessário de forma a responder às seguintes questões:

  1. Localize no código como é feita a adição, remoção e atribuição de métodos ao delegate e onde é feita a invocação do delegate.
  2. Por que ordem são executados os métodos registados nos delegates?
  3. O que acontece se igualar um delegate a null antes do invocar?
  4. É possível adicionar métodos estáticos a delegates?
  5. O que acontece aos métodos registados no delegate se um novo método é atribuído? São invocados?
  6. Verifique que é possível passar um delegate como argumento e ser invocado dentro de um método.

 

B - Eventos

Estude o código exercicio-2.cs que pretende simular um controlo de um form - um slider. Um slider é caracterizado unicamente por uma posição que varia. Como se trata de uma simulação, esta posição é actualizada programaticamente pelo set do atributo Position e não por interacção do rato.

a) Implemente o código necessário de modo a garantir o seguinte:

b) Verifique o que acontece quando tenta desencadear o evento fora da classe onde este está declarado.

 

C - Threads

Implemente uma thread pool tal que:

Complemente o código do exercicio-3.cs.

 


Exercício Suplementar

Multithreading em Windows Forms

O programa AsynchCalcPi.zip permite calcular o número Pi com a precisão indicada pelo utilizador. Calcula nove dígitos de cada vez entre actualizações da interface. Observe o código fonte.

a) Execute o programa (sugere-se com um número elevado de dígitos, por exemplo 1000). Enquanto o programa efectua os cálculos, porque razão ao minimizar e ao maximizar a janela, esta deixou de ser desenhada? Considere o seguinte:

b) Estude a solução proposta nos artigos seguintes. São usados delegates assíncronos que usam uma thread pool existente internamente ao CLR - common language runtime.