2013-06-01 32 views
19

Vì vậy, tôi có nhãn ở đây (""). Khi nút (button1) được nhấp, văn bản nhãn sẽ chuyển thành "Kiểm tra". Sau 2 giây, văn bản được đặt lại thành "". Tôi đã thực hiện công việc này với bộ hẹn giờ (có khoảng thời gian là 2000):Sử dụng không đồng bộ để ngủ trong một chủ đề không có đóng băng

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

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

Tác phẩm này; Tuy nhiên, tôi tò mò về việc làm cho nó hoạt động trong một phương pháp async.

Mã của tôi trông giống như hiện nay:

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

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

này không hoạt động mặc dù.

+0

Tôi vừa thử phương pháp của bạn và nó hoạt động tốt, khi nhấp vào thay đổi thành "Kiểm tra" 2 giây sau nó thay đổi thành "" –

+0

Bạn có thể giải thích "Điều này không hoạt động" không? Bạn đang mong đợi điều gì và bạn đã quan sát điều gì? Lỗi trình biên dịch? Dấu vết ngăn xếp ngoại lệ? –

Trả lời

46

Như tôi đã đề cập mã của bạn làm việc tốt cho tôi, Nhưng có lẽ hãy thử đặt trình xử lý của bạn thành async và chạy Task.Delay trong đó.

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

Vâng, tôi nghĩ thật khó để nói vấn đề của tôi là gì. Tuy nhiên mặc dù, điều này dường như làm việc mà không có bất kỳ vấn đề :) Cảm ơn bạn và tôi sẽ cố gắng từ câu hỏi trong tương lai cẩn thận hơn. – jacobz

+1

Đối với những người không muốn tạo một chức năng không đồng bộ: 'Task.Delay (2000) .Wait();' –

+1

@JoshMc Bạn nói đúng, nhưng điều đó sẽ khiến cho luồng GUI bị chặn trong 2 giây. Đó không phải là một giải pháp tốt. – sighol

Các vấn đề liên quan