2011-11-22 50 views
0

更新我有一個簡單的應用程序,我與使用DispatcherTimer時基倒數計時器創建。我有一個DispatcherTimer的On_Tick事件處理程序設置(設置爲1秒的時間間隔)。我有三個(3)數據透視頁面,使用三個不同的實例AdControl,並且所有實例都具有真實的ApplicationID和AdUnitID。此計時器在其中一個數據透視頁面上設置。DispatcherTimer不與廣告控制運行

我所看到的是,當我打開我的應用程序和廣告控制啓動,60秒後,該廣告控制要刷新。我的計時器在第一分鐘內工作正常,然後每三秒鐘開始丟失一秒鐘,就像缺少滴答事件(巧合的是,adcontrol每三秒鐘滾動一次新消息?)。我已經嘗試使用調度員定時器的後臺工作人員,但似乎沒有爲我做任何事情。事件處理程序中的代碼非常短,只有幾個「if-then」語句和一些textBlock更新。

其他人看到與廣告控制類似的問題?

回答

0

我想說的原因是廣告控制和定時器都想做UI線程上的東西。因此,當廣告控件忙時,定時器操作在此期間被阻止。引述MSDN

定時器,不能保證當時間間隔 發生精確執行,但他們都保證 間隔發生的時間之前不會執行。這是因爲DispatcherTimer操作像其他操作一樣在Dispatcher隊列上放置了 。執行DispatcherTimer操作時,執行 隊列及其優先級。

這也解釋了爲什麼使用後臺工作沒有幫助。一旦你從另一個線程回到UI線程,你又會遇到同樣的問題。所以這個問題基本上是通過設計。

哦,它也可以是相反的方式。如果您將在UI線程中進行大量工作,則廣告控件將被阻止。以及其他用戶界面。這就是爲什麼你應該在後臺線程中儘可能多的工作。也許廣告控制不符合此建議。

到目前爲止,這可能不會幫助你很多。但是,也許有可能僅僅使用一個AdControl,並在用戶平移時將其從樞軸轉移到樞軸?

0

我經歷了我自己的計時器風格的應用程序相同的問題。在我看來,只有在當前廣告中有動畫時纔會發生。

按照DispatcherTimer文件,延遲是預期的行爲,因此該解決方案是使用不同的定時器......如System.Threading.Timer

... 
    //create the timer 
    var timer = new System.Threading.Timer(
     new System.Threading.TimerCallback(TimerTick), 
     null, 
     //Set the due time to infinite so the timer wont start immediately 
     System.Threading.Timeout.Infinite, 
     0); 

    //start the timer 
    timer.Change(0, 1000); 

    //stop the timer 
    timer.Change(System.Threading.Timeout.Infinite, 0); 
} 

void TimerTick(object state) 
{ 
    //Dont forget to update the UI on the UI thread. 
    Dispatcher.BeginInvoke(() => 
     { 
      MyTextBox.Text = "New Text"; 
     }); 
} 

問題解決了!