2013-06-01 35 views
19

所以我在這裏的一個標籤(「」)。當按鈕(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 = ""; 
} 

這不工作,雖然。

+0

我只是想你的方法,它工作正常,點擊它更改爲「測試」 2秒後它更改爲「」 –

+0

你能否闡述的:「這不行」?你在期待什麼,你觀察到了什麼?編譯器錯誤?異常堆棧跟蹤? –

回答

46

正如我所提到的,您的代碼對我來說工作得很好,但也許嘗試將您的處理程序設置爲async並在其中運行Task.Delay

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

是的,我認爲很難說出我的問題是什麼。但是,這似乎工作沒有任何問題:)謝謝你,我會嘗試更仔細地提出未來的問題。 – jacobz

+1

對於那些不希望創建異步函數的人:'Task.Delay(2000).Wait();' –

+1

@JoshMc你是對的,但這會導致GUI線程被阻塞2秒。這不是一個好的解決方案。 – sighol