2014-06-06 43 views
2

我想每隔幾秒就載入一張圖片。我創建了DispatcherTimer,並且我希望在計時器中不做任何事情,只是等待間隔。我怎樣才能做到這一點?DispatcherTimer等待迴路

if (window.DialogResult == true) { 
       st=window.st; 
       for(int i=0;i<=st;i++){ 
        timer = new DispatcherTimer(); 
        timer.Interval = new TimeSpan(0,0,5); 
        timer.Tick += new EventHandler(timer_Tick); 
        timer.Start(); 
       arr[i]=window.arr[i]; 
       image1.Source = arr[i]; 
       } 
      } 

在這裏,我現在有空滴答。

void timer_Tick(object sender, EventArgs e) 
     { 

     } 
+0

你確定這就是你想要什麼?或者你想在每個打勾上加載圖像?目前你正在創建許多'DispatcherTimer'對象什麼都不做...... –

+0

@WolfgangZiegler是的,我用DispatcherTimer檢查選項。與DispatcherTimer –

回答

6

一種選擇是使用async/await

async void button_click(object sender, RoutedEventArgs e) 
{ 
    // prepare the array 
    // ... 

    for (var i = 0; i < 100; i++) 
    { 
     image1.Source = arr[i]; 
     await Task.Delay(5000); 
    } 
} 

您可能希望確保button_click沒有重新進入,而異步循環仍然迭代。檢查盧西恩Wishick的"Async re-entrancy, and the patterns to deal with it".

如果你堅持要用DispatcherTimer

async void button_click(object sender, RoutedEventArgs e) 
{ 
    // prepare the array 
    // ... 

    var tcs = new TaskCompletionSource<object>(); 
    var timer = new DispatcherTimer(); 
    timer.Interval = new TimeSpan(0,0,5); 
    timer.Tick += (_, __) => tcs.SetResult(Type.Missing); 
    timer.Start(); 
    try 
    { 
     for (var i = 0; i < 100; i++) 
     { 
      image1.Source = arr[i]; 
      await tcs.Task; 
      tcs = new TaskCompletionSource<object>(); 
     } 
    } 
    finally 
    { 
     timer.Stop(); 
    } 
} 
+0

我不能做出相同的效果? –