web-dev-qa-db-ja.com

非同期を使用してフリーズせずにスレッドでスリープ状態にする

ここにラベルを付けます( "")。ボタン(button1)をクリックすると、ラベルテキストが「テスト」に変わります。 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 = "";
}

しかし、これは機能しません。

38
jacobz

先ほど述べたように、あなたのコードはうまく機能しましたが、おそらくハンドラをasyncに設定し、Task.Delay そこで。

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