this.Dispatcher.BeginInvoke无效

时间:2014-04-10 12:01:13

标签: c# windows-phone-8

我编写如下代码:在构造函数

newTimer = new DispatcherTimer(); 
newTimer.Interval = TimeSpan.FromSeconds(1); 
newTimer.Tick += OnTimerTick; 
newTimer.Start(); 


private void OnTimerTick(object sender, EventArgs e) { 
    SecondsToGo--; 
    if (SecondsToGo == 0) { 
        change();
        SecondsToGo= 3;
    }
    Timein.Text = SecondsToGo.ToString(); 
}

改变功能

public void change() {
    c = new List<TokenList>();
    for (int i =0;i<10 ;i++)
    {
        c.Add(new TokenList("hello", "Hi"));
    }
    this.Dispatcher.BeginInvoke(new Action(()=>{
        longlistselector.ItemsSource.Clear();
        longlistselector.ItemsSource = c;
    }));
}

长列表选择器项仍然是旧值。我该如何更新这些值?

2 个答案:

答案 0 :(得分:0)

UI调度程序上已经有

DispatcherTimer调用Tick方法(假设您是从UI调度程序创建了它的对象)。您不需要将其放在UI调度程序上。在没有调度员的情况下试用您的代码。

public void change()
{
    for (int i =0;i<10 ;i++)
    {
        c.Add(new TokenList("hello", "Hi"));
    }
    longlistselector.ItemsSource.Clear();
    longlistselector.ItemsSource = c;
}

答案 1 :(得分:0)

我的猜测是,您每次都会重复使用c的相同实例。如果我没记错的话,LongListSelector的ItemsSource属性会使用一个优化来阻止你重新分配一个对象的同一个实例(更不用说你对Clear()的调用了,这显然是假的) 。使用ObservableCollection并仅将其分配给ItemsSource,或者每次都创建c的新实例