2014-09-02 5 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; 
    } 
} 

, 나는 X 초 지연 각 사이클 후 덮어 쓰기 값을보고 싶어 예를 들어, 내가 뭔가의 값을 계산하고 표시 루프를 가지고 WPF에서 그것을 달성?

+0

에서 [DispatcherTimer (http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer%28v=vs.110%29.aspx) 클래스를 살펴 보자 . –

+0

그냥 지연 되니? 스레드 풀 호출 (또는 작업)에서 잠자기 후 메인 스레드로 보내 업데이트합니다. 반복적 인? 디스패치 타이머. –

+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

'async' 메서드에서'void '를 반환하는 것에 대한 경고 플래그가 있습니다. – Jodrell

+1

@ Jodrell, 이것은 비동기 void (비동기 이벤트 핸들러)의 의도 된 사용 사례 였지만, 그렇다면 결국 OP가이 이벤트 핸들러에서 Task를 리턴하는 비동기 메소드를 분리하는 것이 좋습니다. OP가 학습하는 동안 이것은 여전히 ​​중간에 좋은 해결책입니다. –

+1

@Jodrell 이것은 이벤트에 대한 이벤트 처리기입니다. 이 정확한 상황은 그대로 말 그대로 정확히 왜 비동기 무효화가 합법적 이었는지 이유입니다. – Servy

관련 문제