Erstellen müssen DependencySource auf denselben Thread DependencyObject

Ich habe eine Anwendung geschrieben in wpf, die downloads einige Webseiten, analysiert html-code und speichert einige Werte.

class ListOfItems
{    
    public List<SomeObject> ListToBind;
    public void DownloadItems()
    { 
        Task.Factory.StartNew(() => 
        {
            ...
            ...
            if (OnDownloadCompleted != null)
                OnDownloadCompleted(this, EventArgs.Empty);
        }
    }
}

class SomeObject
{
    public string NameOfItem;
    public MyClass Properties;
}

class MyClass
{
    public int Percentage;
    public SolidColorBrush Color;
}

Dies ist das Objekt, das Modell, das ich verwende. Es ist die vereinfachte version und ich will nicht, Sie zu reorganisieren, gibt es einen Grund, warum ich schrieb es auf diese Weise. In ListOfItems Klasse ist die Methode, die macht die ganze Arbeit (es gibt einige andere Methoden, die verwendet, um code lesbar) - downloads-Quelle, analysiert und füllt ListToBind mit Daten -, f -.e.

[0] => NameOfItem = "FirstOne", Properties = {99, #FF00FF00}
[1] => NameOfItem = "SecondOne", Properties = {50, #FFFF0000}
etc.

Wie Sie sehen können, wenn Sie diese Methode DownloadItems beendet seine Arbeit, OnDownloadCompleted Ereignis ausgelöst wird. In der Haupt-thread folgenden code

void listOfItems_OnDownloadCompleted(object sender, EventArgs args)
{
    dataGrid.Dispatcher.Invoke(new Action(() => { 
                dataGrid.ItemsSource = ListOfItemsInstance.ListToBind;
            }));
}

DataGrid auf die MainWindow.xaml ist mit Werten gefüllt, da der folgende xaml-code-snippet.

<DataGrid Name="dataGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
         <DataGridTextColumn Header="Tag" Binding="{Binding Name}"/>
         <DataGridTextColumn Header="Color" Binding="{Binding MyClass.Percentage}">
             <!--<DataGridTextColumn.CellStyle>
                 <Style TargetType="DataGridCell">
                     <Setter Property="Background" Value="{Binding MyClass.Color}" />
                 </Style>
             </DataGridTextColumn.CellStyle>-->
         </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

Funktioniert es Prima. Aber es gibt dieses problem. Versuchen Sie, kommentieren Sie kommentiert xaml-Ausschnitt und erhalten Sie Must create DependencySource on same Thread as the DependencyObject. Fehler.

Schließlich, meine Frage ist, wie man diesen Fehler vermeiden?

EDIT:

Es sollte so Aussehen am Ende. Dieses Bild ist genommen von MS Excel und farbig in Adobe Photoshop.

Erstellen müssen DependencySource auf denselben Thread DependencyObject

Schreibe einen Kommentar