2013-06-01 1 views
19

Итак, я обозначил здесь (""). Когда нажата кнопка (кнопка1), текст ярлыка превращается в «Тест». Через 2 секунды текст возвращается обратно в "". Я сделал эту работу с таймером (который имеет интервал 2000):Использование async для сна в потоке без замерзания

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 Вы правы, но это приведет к блокировке потока графического интерфейса пользователя в течение 2 секунд. Это нехорошее решение. – sighol

Смежные вопросы