我有一个 WPF 控件,它正在我的应用程序的主线程中处理、呈现和显示。该控件将数千个数据点上传到一个名为“Layer”的对象中。以下是对象/类层次结构的粗略描述:
public class WPFControl{
private List<Layer> myLayers;
public List<Layer> MyLayers{
get{ return myLayer;}
}
...
}
public class Layer{
private List<DataPoint> myDataPoints;
public List<DataPoint> MyDataPoints{
get{ return myDataPoints;}
}
...
}
public class DataPoint{
....
}
由于这个“层”对象的创建过程需要一些时间,因为它必须读取和上传数千个数据点,所以我在不同的线程中创建该层对象。这很好用,并且很好地返回了 Layer 对象。问题是当我尝试将它添加到 WPF 控件以显示如下时:
myWpfControl.MyLayers.Add(layerCreatedInOtherThread);
WPF 控件触发此错误:
The calling thread cannot access this object because a different thread owns it
我想,好吧,我可以像这样使用调度程序:
myWpfControl.Dispatcher.Invoke((Action)
(()=>{
myWpfControl.MyLayers.Add(layerCreatedInOtherThread);
})
);
但我不断收到同样的错误。有什么想法可以解决这个问题吗?