使用异步在线程中睡眠而不冻结

所以我在这里贴了一个标签(“”)。 单击按钮(按钮1)时,标签文本变为“测试”。 2秒后,文本将重新设置为“”。 我使用计时器(间隔为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 = ""; } 

这有效; 但是,我很好奇它使它在异步方法中工作。

我的代码目前看起来像这样:

 private void button1_Click(object sender, EventArgs e) { label1.Text = "Test"; MyAsyncMethod(); } public async Task MyAsyncMethod() { await Task.Delay(2000); label1.Text = ""; } 

但这不起作用。

正如我所提到的,你的代码对我来说很好,但也许尝试将你的处理程序设置为async并在那里运行Task.Delay

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