Using async to sleep in a thread without freezing

C#AsynchronousSleepFreeze

C# Problem Overview


So I a label here (""). When the button (button1) is clicked, the label text turns into "Test". After 2 seconds, the text is set back into "". I made this work with a timer (which has an interval of 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 = "";
}

This works; however though, I am curious about making it work in an async method.

My code looks like this currently:

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

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

This doesn't work though.

C# Solutions


Solution 1 - C#

As I mentioned your code worked fine for me, But perhaps try setting your handler to async and running the Task.Delay in there.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjacobzView Question on Stackoverflow
Solution 1 - C#sa_ddam213View Answer on Stackoverflow