ObservableCollection从一个方法更新而不是另一个方法

时间:2013-10-06 02:34:49

标签: c# wpf mvvm

我有一个方法可以更新我的observableCollection

public void UpdateBeat()
{
    SequenceCollection = new ObservableCollection<Sequence>();

    Random random = new Random();
    int randomNumber = random.Next(0, 100);

    SequenceCollection.Add(new Sequence(1, 2));            
}

我从事件中触发了两种不同的方法 - 视图从一个方法更新而不是另一个方法。

//Does not work
private void BsOnUpdateStep(object sender, EventArgs eventArgs)
{
    Console.WriteLine("BS Update");
    UpdateBeat();
}

//Works
void total_AudioAvailable(object sender, AsioAudioAvailableEventArgs e)
{
    Console.WriteLine("ASIO Written");
    UpdateBeat();
}

我不知道这里的区别是什么。我唯一能说的就是第一种方法比第二种方法更频繁地发射。我根本无法让第二个工作。

2 个答案:

答案 0 :(得分:2)

我认为你对UpdateBeat的调用来自不同的线程,但ObservableCollection不是线程安全的,这就是为什么 - 可能 - 你有这么奇怪的结果。

您应该寻找并发的ObservableCollection。

可在此处找到一个此类实施:http://www.codeproject.com/Tips/414407/Thread-Safe-Improvement-for-ObservableCollection

答案 1 :(得分:1)

试试这个:

private SequenceCollection = new ObservableCollection<Sequence>();
Random random = new Random();

public void UpdateBeat()
{
    int randomNumber = random.Next(0, 100);

    SequenceCollection.Add(new Sequence(1, 2));            
}

我将Random实例化放在方法之外,因为您只应实例化一次以获得适当的随机数流。