2013-06-01 8 views
19

Quindi ho un'etichetta qui (""). Quando viene cliccato il pulsante (button1), il testo dell'etichetta diventa "Test". Dopo 2 secondi, il testo viene reimpostato in "". Ho fatto questo lavoro con un timer (che ha un intervallo di 2000):Uso async per dormire in una discussione senza congelamento

private void button1_Click(object sender, EventArgs e) 
{ 
    label1.Text = "Test"; 
    timer.Enabled = true; 
} 

private void timer_Tick(object sender, EventArgs e) 
{ 
    label1.Text = ""; 
} 

Questo funziona; tuttavia, sono curioso di farlo funzionare in un metodo asincrono.

Il mio codice simile a questo momento:

private void button1_Click(object sender, EventArgs e) 
{ 
    label1.Text = "Test"; 
    MyAsyncMethod(); 
} 

public async Task MyAsyncMethod() 
{ 
    await Task.Delay(2000); 
    label1.Text = ""; 
} 

Questo non funziona però.

+0

Ho appena provato il tuo metodo e funziona benissimo, il clic su di esso cambia per "testare" 2 secondi dopo si passa a "" –

+0

Potrebbe esporre su "Questo non funziona"? Cosa ti aspettavi e cosa hai osservato? Errori del compilatore? Tracce dello stack di eccezioni? –

risposta

46

Come ho menzionato il tuo codice ha funzionato bene per me, ma forse prova a impostare il gestore su async ed esegui il Task.Delay lì.

private async void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
    label1.Text = "Test"; 
    await Task.Delay(2000); 
    label1.Text = ""; 
} 
+1

Sì, penso che sia stato davvero difficile dire quale fosse il mio problema. Tuttavia, questo sembra funzionare senza problemi :) Grazie e proverò a formulare domande future più attente. – jacobz

+1

Per coloro che non desiderano creare una funzione asincrona: 'Task.Delay (2000) .Wait();' –

+1

@JoshMc Avete ragione, ma ciò causerebbe il blocco del thread della GUI per 2 secondi. Questa non è una buona soluzione. – sighol