0

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

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();
}

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

4

2 回答 2

2

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

你应该寻找一个并发的 ObservableCollection。

一个这样的实现可以在这里找到:http: //www.codeproject.com/Tips/414407/Thread-Safe-Improvement-for-ObservableCollection

于 2013-10-06T07:37:09.140 回答
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实例化放在方法之外,因为您应该只实例化一次以获得正确的随机数流。

于 2013-10-06T06:59:23.740 回答