Então, algo está me incomodando sobre o novo suporte assíncrono em C # 5:
O usuário pressiona um botão que inicia uma operação assíncrona. A chamada retorna imediatamente e a bomba de mensagens começa a funcionar novamente - esse é o ponto.
Assim, o usuário pode pressionar o botão novamente - causando reentrada. E se isso for um problema?
Nas demos que eu vi, elas desativam o botão antes da await
chamada e o ativam novamente depois. Isso me parece uma solução muito frágil em um aplicativo do mundo real.
Devemos codificar algum tipo de máquina de estado que especifique quais controles devem ser desabilitados para um determinado conjunto de operações em execução? Ou há um jeito melhor?
Estou tentado a mostrar apenas uma caixa de diálogo modal durante a operação, mas parece um pouco como usar uma marreta.
Alguém tem alguma idéia brilhante, por favor?
EDITAR:
Eu acho que desabilitar os controles que não devem ser usados enquanto uma operação está em execução é frágil, porque acho que rapidamente se tornará complexo quando você tiver uma janela com muitos controles. Eu gosto de manter as coisas simples porque reduz a chance de erros, tanto durante a codificação inicial quanto na manutenção subsequente.
E se houver uma coleção de controles que devem ser desabilitados para uma operação específica? E se várias operações estiverem sendo executadas simultaneamente?