2014-09-02 4 views
1

У меня есть цикл, где я вычислить значение чего-то и отобразить его, напримерКак задержать цикл цикла?

void Button_Click(object sender, RoutedEventArgs e) 
{ 
    InitializeComponent(); 

    Random rand = new Random(); 
    for (i = 0; i <= 30; i++)   
    { 
     rnd = rand.Next(1,10); 
     value += i + rnd; 
     display.Content = value; 
    } 
} 

Проблема заключается в том, я хочу, чтобы увидеть значение перезаписывается после каждого цикла, задержанный на Х секунд, как я мог добиться этого в WPF?

+0

Посмотрите на класс [DispatcherTimer] (http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer%28v=vs.110%29.aspx) , –

+0

Просто задержка? Сон в вызове пула потоков (или Task) затем отправляется в основной поток для обновления. Серийное? Диспетчер. –

+1

'Thread.Sleep'? –

ответ

5

Используйте Task.Delay для выполнения некоторого кода через определенный промежуток времени.

private async void Button_Click(object sender, RoutedEventArgs e) 
{ 
    InitializeComponent(); 

    Random rand = new Random(); 
    for (i = 0; i <= 30; i++)   
    { 
     rnd = rand.Next(1,10); 
     value += i + rnd; 
     display.Content = value; 
     await Task.Delay(Timespan.FromSeconds(1)); 
    } 
} 
+0

У меня есть предупреждающий флаг в моем уме о возврате 'void' из' async' методов. – Jodrell

+1

@Jodrell, это был предполагаемый прецедент для async void (асинхронные обработчики событий), но да, было бы хорошей идеей для OP в конечном итоге отделить метод async, возвращающий Task из этого обработчика событий. Это до сих пор хорошее простенькое решение, в то время как OP учится. –

+1

@Jodrell Это обработчик события для события. Эта точная ситуация буквально является именно тем, почему они сделали «асинхронный закон» в первую очередь. – Servy

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