Der richtige Weg des Hintergrundarbeiters zum Zugriff auf die Benutzeroberfläche

8

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?

    
Prisoner 22.02.2011, 02:48
quelle

4 Antworten

12

Sie können Daten über das Argument des RunWorkerAsync-Aufrufs an den Worker übergeben und Daten über DoWorkEventArgs.Result ... übergeben.

%Vor%     
Rusty 22.02.2011, 05:42
quelle
3

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.

    
Richard Schneider 22.02.2011 03:25
quelle
0

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

Ссылка

    
biju 22.02.2011 04:18
quelle
-1
%Vor%     
Svisstack 22.02.2011 02:53
quelle

Tags und Links