从一种方法更新可观察集合,但不从另一种方法更新

本文关键字:方法 更新 集合 另一种 观察 一种 | 更新日期: 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实例化放在方法之外,因为您应该只实例化一次以获得适当的随机数流。