2012-03-04 98 views
0

我得到這個定時器(定時器2),它運行每隔60秒.. 而且我得到了這第二個定時器(定時器4)計時器保持循環

時60秒都結束了,timer2_Tick做了幾件事情,並啓動定時器4 。 定時器4確保等待4秒鐘才能開始行動(我需要4秒鐘以確保所有下載的數據都在那裏)

當這4秒鐘結束時,定時器應該改變圖像, 因此,所有的作品..

的問題是,每4秒的圖像閃爍..圖像是達塔模板中..

我怎麼停止..?我需要停止()還是我需要一個運行計數器..?

請幫助這是推動我堅果..

private void timer2_Tick(object sender, EventArgs e) 
    { 
     locationTextBox2.Text = ""; 

     if (locationTextBox2.Text == "") 
     { 
      Weatherframe.Source = (ImageSource)new ImageSourceConverter().ConvertFromString(""); 
     } 

     Weatherframe2.Source = Weatherframe.Source; 

     System.Windows.Threading.DispatcherTimer timer4 = new System.Windows.Threading.DispatcherTimer(); 
     timer4.Interval = new TimeSpan(0, 0, 0, 4, 000); // 500 Milliseconds 
     timer4.Tick += new EventHandler(timer4_Tick); 
     timer4.Start(); 

    } 

    void timer4_Tick(object sender, EventArgs e) 
    { 
     if (locationTextBox2.Text == String.Empty) 
     { 
      locationTextBox2.Text = textBlock2.Text; 
     } 
    } 

回答

1

你永遠不會停止計時,所以它將繼續滴答作響每四秒。

只需在處理程序中的定時器上調用Stop,但爲此您需要將定時器的引用保留在成員變量中,以便在創建它之後可以訪問定時器。

System.Windows.Threading.DispatcherTimer timer4; 

private void timer2_Tick(object sender, EventArgs e) 
{ 
    locationTextBox2.Text = ""; 

    if (locationTextBox2.Text == "") 
    { 
     Weatherframe.Source = (ImageSource)new ImageSourceConverter().ConvertFromString(""); 
    } 

    Weatherframe2.Source = Weatherframe.Source; 

    timer 4 = new System.Windows.Threading.DispatcherTimer(); 
    timer4.Interval = new TimeSpan(0, 0, 0, 4, 000); // 500 Milliseconds 
    timer4.Tick += new EventHandler(timer4_Tick); 
    timer4.Start(); 

} 

void timer4_Tick(object sender, EventArgs e) 
{ 
    timer4.Stop(); 
    if (locationTextBox2.Text == String.Empty) 
    { 
     locationTextBox2.Text = textBlock2.Text; 
    } 
} 
+0

感謝您的回覆..但我已經嘗試將timer4.Stop()放在處理程序中但它沒有工作..我想那是參考進來的..我不知道該怎麼做.. – 2012-03-04 17:19:30

+1

@youngblade:在方法外部聲明變量,以便它是該類的成員。 – Guffa 2012-03-04 19:04:17

+0

我明白,但不知道怎麼做..有點初學者..你能告訴我怎麼..我試過了:int timer4; timer4.Stop() – 2012-03-04 21:22:12

1

您應該可以聽取圖像實際下載的時間,而不是猜測需要4秒。你可以做到這一點通過訂閱DownloadCompleted事件上的BitmapSource

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.downloadcompleted.aspx

你或許應該還聽DownloadFailed和DecodeFailed檢測錯誤。

+0

它不是正在下載的圖像..它的第一個地理數據(經度和緯度),並在那之後,一些天氣數據和取決於天氣條件我設置了一些圖像。圖片在本地保存在應用程序中。 – 2012-03-04 21:39:35

+0

您仍應該注意下載的完成情況,而不是猜測固定的時間。 Webclient.DownloaddataCompleted甚至更好地查看Task Parallel Library,然後執行Task.WhenAll(tasks,()=> OnAllDownloaded); – 2012-03-05 07:32:44

+0

是的,你的權利,我也會看看那個.. – 2012-03-05 12:41:02

0
void timer4_Tick(object sender, EventArgs e) 
{ 
    if (locationTextBox2.Text == String.Empty) 
    { 
     locationTextBox2.Text = textBlock2.Text; 
     System.Windows.Threading.DispatcherTimer theTimer = sender as System.Windows.Threading.DispatcherTimer; 
     theTimer.Stop(); 
    } 
} 
+0

哇我沒有看到您的回覆到現在..我會去嘗試一下吧..! – 2012-03-04 21:33:16

+0

錯誤無法找到類型或名稱空間名稱'Timer'(您是否缺少使用指令或程序集引用?)我認爲我們需要參考?我不確定.. – 2012-03-04 21:35:41

+0

修復了代碼。 – 2012-03-05 06:29:17