Todos sabemos da importância do trabalho e do descanso em nossas vidas e, pode acreditar, uma aplicação não é diferente.
A aplicação tem que ser a mais rápida e eficiente possível certo ? Certo. Porém algumas vezes temos que fazer algumas considerações.
Sabe aquela ideia que o bom é inimigo o ótimo? Pois é.
Você sabe que o computador é incapaz de executar 2 coisas ao mesmo tempo. Mesmo sendo o processador multi-núcleos( Multithreading ), multi-tarefas, multi-preemptivo ou não, eles só são capazes de executar uma coisa de cada vez. O que o sistema faz é 'chavear' o tempo entre as tarefas de maneira que 'parece' que executa 2 coisas ao mesmo tempo mas na realidade não faz isso mesmo. Note que ao chavear a execução das tarefas no tempo diminui a eficiência total do sistema na execução de cada tarefa.
Sabemos que nossas aplicações rodam sobre o sistema operacional. Sendo assim as tarefas das nossas aplicações tem prioridade ( rodam em primeiro plano ) sobre as aplicações do sistema operacional que rodam 'em segundo plano'.
Por exemplo, temos uma tarefa A que está rodando e uma outra tarefa B que deverá ser executada, invocada pela mesma tarefa A ou não. Aí o sistema tem que tomar uma decisão :
• 1-Parar a execução da tarefa A para executar a tarefa B porque a tarefa B é importante. Isso diminui a eficiência da execução da tarefa A mas como a tarefa B é importante, tem que ser feito.
• 2-NÃO devo parar a execução da tarefa A para executar a tarefa B porque a tarefa B é NÃO é importante. Isso aumenta a eficiência da execução da tarefa A e a tarefa B terá que aguardar o término da tarefa A para ser executada se é que a tarefa A terminará.
Contudo o computador num programa executa o que foi programado para fazer e não aquilo que você gostaria que ele fizesse ( lei de Murphy para a informática ). Sendo assim nós devemos determinar o que é e o que não é importante.
Sempre que o windows está executando uma tarefa ela tem a máxima importância no sistema, tem o foco e é chamada de 'aplicação de foreground' ou principal.
Contudo temos tarefas em 'background' que são importantes também. Por exemplo, podemos incluir uma simples mensagem num listbox que só será renderizado, atualizado e exibido ao término da aplicação corrente se é qua aplicação corrente terminará, ou seja, pode ser que nunca seja exibido corretamente.
Sendo assim, se a emissão da mensagem para o usuário é importante, temos que instruir nosso programa para que 'dê um tempo' para que o windows atualize o que precise ser atualizado ( o background ), ou seja, faça a renderização do elemento e exiba a mensagem.
Temos as seguintes instruções para que nosso programa dê a prioridade de execução para o windows:
O método refresh informa ao sistema operacional que o elemento deve ser sua exibição atualizada. Contudo solicita mas a gente não manda no sistema operacional apenas 'sinaliza' que o elemento deve ser atualizado.
Exemplo de Uso : ListBox1.Refresh()
O método Application.DoEvents(). Este método faz com que nossa aplicação dê a prioridade de volta ao windows executar seus processos. Nesta instrução o windows iria 'renderizar' nosso listbox atualizado e assim exibiria a mensagem ao usuário.
Imagine que sua app deu um erro e você termine ela imediatamente. Provavelmente o usuário sequer conseguiria ler uma mensagem ou tomar nota de um erro ocorrido.
Sendo assim podemos utilizar a instrução System.Threading.Thread.Sleep(5000) onde 5000 é o tempo em milisegundos, o que significa, 5 segundos.
Esta instrução faz com que a app aguarde, durma por 5 segundos antes de continuar a execução do próximo passo. É muito útil na interação como usuário ou com
o sistema operacional quando mudamos uma pasta, eliminamos um arquivo ou usamos a instrução 'SendKeys'.
Como você pode ver nesta página algumas vezes dar um tempo para tomar um fôlego é fundamental, até para computadores, portanto mantenha sempre em sua mente, o mais importante é a sua saúde e o resto a gente vai atras.