Quindi, qualcosa mi ha infastidito riguardo al nuovo supporto asincrono in C # 5:
L'utente preme un pulsante che avvia un'operazione asincrona. La chiamata ritorna immediatamente e il pump dei messaggi riprende a funzionare - questo è il punto.
Quindi l'utente può premere di nuovo il pulsante, causando il rientro. E se questo fosse un problema?
Nelle demo che ho visto, disabilitano il pulsante prima della await
chiamata e lo abilitano nuovamente in seguito. Questa mi sembra una soluzione molto fragile in un'app del mondo reale.
Dovremmo codificare una sorta di macchina a stati che specifica quali controlli devono essere disabilitati per un determinato set di operazioni in esecuzione? O c'è un modo migliore?
Sono tentato di mostrare una finestra di dialogo modale per tutta la durata dell'operazione, ma sembra un po 'come usare una mazza.
Qualcuno ha qualche idea brillante, per favore?
MODIFICARE:
Penso che disabilitare i controlli che non dovrebbero essere usati mentre un'operazione è in esecuzione sia fragile perché penso che diventerà rapidamente complesso quando si ha una finestra con molti controlli su di essa. Mi piace mantenere le cose semplici perché riduce la possibilità di bug, sia durante la codifica iniziale che la successiva manutenzione.
Cosa succede se esiste una raccolta di controlli che dovrebbero essere disabilitati per una particolare operazione? E se più operazioni sono in esecuzione contemporaneamente?