从一种方法更新可观察集合,但不从另一种方法更新
本文关键字:方法 更新 集合 另一种 观察 一种 | 更新日期: 2023-09-27 18:34:08
我有一个更新我的可观察集合的方法
public void UpdateBeat()
{
SequenceCollection = new ObservableCollection<Sequence>();
Random random = new Random();
int randomNumber = random.Next(0, 100);
SequenceCollection.Add(new Sequence(1, 2));
}
我有 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();
}
我不知道这里有什么区别。我唯一能说的是,第一种方法比第二种方法更频繁地触发。我根本无法让第二个工作。
我想你对UpdateBeat的调用来自不同的线程,但ObservableCollection不是线程安全的,这就是为什么 - 可能 - 你有如此奇怪的结果。
您应该查找并发的 ObservableCollection。
可以在此处找到一个这样的实现:http://www.codeproject.com/Tips/414407/Thread-Safe-Improvement-for-ObservableCollection
试试这个:
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
实例化放在方法之外,因为您应该只实例化一次以获得适当的随机数流。