Wie soll ich den UI-Thread von Task aktualisieren?

7

Ich habe eine Aufgabe, die schwere Arbeit leistet. Ich muss sein Ergebnis nach LogContent

verlegen %Vor%

Dies ist die Eigenschaft:

%Vor%

Problem ist, dass _traceEntryQueue Daten an die UI gebunden sind, und aus diesem Grund habe ich eine Ausnahme bei Code wie diesem.

Also, meine Frage ist, wie man es richtig funktioniert?

    
Night Walker 31.01.2013, 06:52
quelle

4 Antworten

5

Sie müssen die ContinueWith-Task auf dem UI-Thread ausführen. Dies kann mit dem TaskScheduler des UI-Threads mit der überladenen Version der ContinueWith-Methode erreicht werden , dh.

%Vor%     
bobblez 31.01.2013, 07:06
quelle
16

Hier ist ein guter Artikel: Parallele Programmierung: Aufgabenplaner und Synchronisationskontext .

Sehen Sie sich die Task.ContinueWith () -Methode an.

Beispiel:

%Vor%

Seit .NET 4.5 unterstützt async / await keywords (siehe auch Task.Run vs. Task.Factory.StartNew ):

%Vor%     
Sergey Brunov 31.01.2013 11:14
quelle
1

Sie können Dispatcher verwenden, um Code im UI-Thread aufzurufen. Sehen Sie sich den Artikel Mit dem WPF-Dispatcher arbeiten

an     
RePierre 31.01.2013 07:08
quelle
0

Wenn Sie async / await verwenden, sehen Sie hier einen Beispielcode, der zeigt, wie Sie eine Task planen, die auf dem GUI-Thread ausgeführt wird. Platzieren Sie diesen Code am unteren Ende des Stapels aller async / await-Aufrufe, um zu vermeiden, dass die WPF-Laufzeit Fehler mit Code auslöst, der nicht im GUI-Thread ausgeführt wird.

Funktioniert mit WPF + MVVM, getestet unter VS 2013.

%Vor%     
Contango 09.09.2014 15:49
quelle