Il blocco di un'interfaccia utente a volte è una buona idea?

4

Dire, ho creato un pulsante personalizzato che include alcune animazioni che vengono riprodotte quando si fa clic sul pulsante. L'animazione richiede 500ms. Durante questo periodo (fino a quando l'animazione è finita), il pulsante non dovrebbe ricevere alcun input, quindi dovrebbero aspettare che gli altri elementi finiscano.

Se lo implemento in questo modo:

public async void Clicked()
{
    await Animate();
}

il thread UI non verrà bloccato e l'utente sarà in grado di premere di nuovo il pulsante durante quel periodo, o premere Back , o fare qualcos'altro che non voglio che sia in grado di fare.

Se lo implemento in questo modo:

public void Clicked()
{
    Animate();
}

il thread dell'interfaccia utente verrà bloccato finché non verrà restituito Animate .

La mia domanda è, è una buona idea bloccare il thread dell'interfaccia utente per impedire all'utente di fare doppio clic su un elemento?

Se no, quale approccio è considerato buono?

    
posta nicks 10.09.2016 - 11:04
fonte

2 risposte

5

L'approccio migliore è quello di tenere traccia se l'animazione è attualmente in esecuzione o meno, in questo modo:

bool animationRuns=false;

async void Clicked()
{
    if(animationRuns)
       return;
    animationRuns=true;
    await Animate();
    animationRuns=false; 
}

In questo modo, l'interfaccia utente sarà ancora reattiva mentre l'animazione è in esecuzione, ma l'utente non può avviarla accidentalmente due volte di nuovo. Se ci sono altri eventi che devono essere disabilitati durante le anim run, puoi testare anche il animationRuns flag.

    
risposta data 10.09.2016 - 11:52
fonte
1

In primo luogo, impostare un'applicazione OnIdle handler. Per un'applicazione WinForms questo è abbastanza semplice, per WPF ci sono un certo numero di alternative elencate qui link

In questo gestore, imposta lo stato abilitato di tutti i controlli che desideri disabilitare mentre l'applicazione è occupata. Utilizza la condizione di stato occupato per i valori abilitati.

    
risposta data 10.09.2016 - 23:01
fonte

Leggi altre domande sui tag