DispatcherTimer不会在AdControl运行时更新

时间:2011-11-22 23:04:42

标签: windows-phone-7 advertising dispatchertimer

我有一个简单的应用程序,我正在使用倒数计时器创建,该计时器使用DispatcherTimer作为时基。我为DispatcherTimer的On_Tick设置了事件处理程序(设置为1秒间隔)。我有三(3)个数据透视表页面使用三个不同的AdControl实例,所有实例都是“实时”的,具有真正的ApplicationID和AdUnitID。此计时器在其中一个枢轴页面上设置。

我所看到的是,当我打开我的应用并且AdControl启动时,60秒后,adControl想要刷新。我的计时器在第一分钟工作正常,然后每三秒开始丢失一秒,就像它缺少一个滴答事件(巧合的是,当adcontrol每隔三秒“滚动”到一条新消息?)。我已经尝试使用后台工作程序为dispatcherTimer,但似乎没有为我做任何事情。事件处理程序中的代码相当短,只有几个“if-then”语句和一些textBlock更新。

其他人看到过与AdControl类似的问题?

2 个答案:

答案 0 :(得分:0)

我想说的原因是广告控件和计时器都想在UI线程上做点什么。因此,当广告控制忙时,在此期间阻止计时器操作。引用MSDN

  

不保证定时器在时间间隔内完全执行   发生,但保证在时间之前不执行   间隔发生。这是因为放置了DispatcherTimer操作   与其他操作一样在Dispatcher队列中。当。。。的时候   DispatcherTimer操作的执行依赖于其他作业   队列及其优先级。

它还解释了为什么使用后台工作者没有帮助。一旦你从另一个线程返回到UI线程,你再次遇到同样的问题。所以这个问题基本上是设计的。

哦,它也可以反过来。如果您要在UI线程中进行密集工作,那么广告控件将被阻止。以及UI的其余部分。这就是为什么你应该在后台线程中做尽可能多的工作的原因。也许广告控制不遵守这个建议。

到目前为止,这可能对你没什么帮助。但也许有可能只使用一个AdControl并将其从Pivot转移到Pivot,因为用户可以进行操作?

答案 1 :(得分: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";
        });
}

问题解决了!