我有一个方法可以更新我的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();
}
我不知道这里的区别是什么。我唯一能说的就是第一种方法比第二种方法更频繁地发射。我根本无法让第二个工作。
答案 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
实例化放在方法之外,因为您只应实例化一次以获得适当的随机数流。