我的情況線程之間的GeometryCollection:如何通過
我想畫一個地圖,由不同的層。
到目前爲止,我使用ItemsControl
來顯示所有的層:
<ItemsControl ItemsSource="{Binding Layers}"
ItemTemplate="{StaticResource LayerViewTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
我用的模板看起來是這樣的:
<DataTemplate x:Key="LayerViewTemplate"
DataType="{x:Type data:InformationLayer}">
<Path StrokeThikness="{Binding W}"
Stroke="Black"
Data = {Binding Data}/>
</DataTemplate>
正如你所看到的,類InformationLayer
包含了所有的一層的數據。這包括:
public GeometryGroup Data { get; protected set; }
生成圖層是一個漫長的過程艱難。 我必須閱讀一堆文件等 這就是爲什麼我想在異步功能中做到這一點。
問題:
GeometryGroup對象屬於創建它們的線程。 所以,如果我使用不同的線程來創建我的圖層,它們將屬於該線程。 我希望它們屬於我的主線程,因爲我想將它們用作綁定源。 是否有可能將GeometryGroup從一個線程移動到另一個線程?
到目前爲止,生成我的圖層的函數如下所示: 但最後一行引發異常,因爲wpf不想綁定到已在其他線程中生成的對象。
protected async void generateLayers()
{
var progress = new Progress<RefreshLayersProgressReport>(ReportLayerProgress);
var ans = await Task.Run(() => refreshLayers(progress));
Layers = ans;
}
線程運行一個單獨的進程,因此您需要在線程開始時將所有數據傳遞給線程或使用管道。一個簡單的管道可以與MemoryStream類一起使用。 – jdweng