Ich bin mir nicht sicher, ob ich das richtig mache, aber ich habe den folgenden Code, den ich benutze (klicke auf Button1, mach das _DoWork). Die Frage ist: Wie rufe ich die Benutzeroberfläche auf, um die Werte von Textfeld1 und Textfeld2 abzurufen, da sie nicht aufgerufen werden können, da sie sich in einem anderen Thread befinden. Soll ich Dispatcher benutzen?
%Vor%Sollte ich Hintergrundarbeiter verwenden?
Wie der Name schon sagt, wird der Background Worker nicht im UI-Thread ausgeführt. Sie können nur auf UI-Steuerelemente zugreifen, wenn Sie sich im UI-Thread befinden. Eine einfache Möglichkeit, dieses Problem zu umgehen, besteht darin, die erforderlichen Textfeldeigenschaften in einem neuen "Objekt" zu speichern und dann an RunWorkerAsync zu übergeben. Dieses Objekt steht Ihrer DoWork-Methode in e.Argument zur Verfügung.
Sie haben jedoch auch ein Problem mit dem Anzeigen eines Formulars in einem Arbeitsthread.
Sie können nicht direkt von BackgroundWorker auf UI-Elemente zugreifen. Dazu müssen Sie Dispatcher verwenden. WPF-Objekte, die von DependencyObject abgeleitet sind, haben thread affinity , was bedeutet, dass nur der Thread, der sie instanziiert, auf ihre Mitglieder zugreifen kann.
Überprüfen Sie den folgenden Link und sehen Sie, ob das Codebeispiel Ihnen hilft
Tags und Links wpf c# backgroundworker