web-dev-qa-db-fra.com

Utiliser async pour dormir dans un thread sans se figer

J'ai donc une étiquette ici (""). Lorsque le bouton (bouton1) est cliqué, le texte de l'étiquette se transforme en "Test". Après 2 secondes, le texte est remis dans "". J'ai fait ce travail avec une minuterie (qui a un intervalle de 2000):

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

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

Cela marche; cependant, je suis curieux de le faire fonctionner dans une méthode asynchrone.

Mon code ressemble à ceci actuellement:

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

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

Mais cela ne fonctionne pas.

38
jacobz

Comme je l'ai mentionné, votre code a bien fonctionné pour moi, mais essayez peut-être de définir votre gestionnaire sur async et d'exécuter le Task.Delay là-dedans.

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