Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ObservableCollection异步项未添加_C#_Wpf_Multithreading_Xaml - Fatal编程技术网

C# ObservableCollection异步项未添加

C# ObservableCollection异步项未添加,c#,wpf,multithreading,xaml,C#,Wpf,Multithreading,Xaml,我目前有一个可观的收集: private readonly object _outputCollectionLock = new object(); private ObservableCollection<ChatterOutput> _outputs; public ObservableCollection<ChatterOutput> Outputs { get { return _outputs; } set { _ou

我目前有一个可观的收集:

private readonly object _outputCollectionLock = new object();
private ObservableCollection<ChatterOutput> _outputs;
public ObservableCollection<ChatterOutput> Outputs
{
    get { return _outputs; }
    set 
    { 
        _outputs = value; 
        BindingOperations.EnableCollectionSynchronization(_outputs, _outputCollectionLock); 
    }
}
在锁后设置的任何断点中,我都可以看到新项被添加到集合中。然而,若我在不同的时间设置断点,我会发现并没有添加新元素

我尝试在Application.Current.Dispatcher上调用它,但这并没有改变任何事情。使用这些集合的唯一其他东西是XAML绑定,即Mode=OneWay

这是线程问题,还是我完全遗漏了什么


谢谢

这里的问题来自将元素传递给多个类。 当我将输出从一个类传递到另一个类,然后使用线程化事件处理程序时,这些类变得独立,因此修改集合并不是修改正确的集合

为了解决这个问题,如果要多线程处理,请在构造函数中找到传递类的解决方法。我的解决方案是单一模式


感谢评论中的所有人。

您能告诉我们您是如何尝试使用dispatcher的吗?对于ObservableCollection还有一件事,您不能将它与XAML.wrap中的CollectionViewSource一起使用,因为它会在Dispatcher.BeginInvoke调用中添加调用。首先,请删除BindingOperations.EnableCollectionSynchronization\u outputCollectionLock;并将其转换为ViewModel的构造函数。我用Task试过你的代码,效果很好。
lock (_outputCollectionLock)
{
    Outputs.Add(new ChatterOutput{Option = option});
}