Jedes Szenario, in dem Task.ContinueWith (..., TaskScheduler.FromCurrentSynchronizationContext ()) * nicht * im UI-Thread ausgeführt wird?

9

Wir beobachten etwas Seltsames, Code wie folgt:

%Vor%

Die zweite Aufgabe ruft dort ein Ereignis auf, das wiederum versucht, die GUI zu aktualisieren, und wir bekommen die gefürchtete Thread-übergreifende Ausnahme.

Wenn Thread.CurrentThread.ManagedThreadId von der Methode in der zweiten Aufgabe überprüft wird, bedeutet dies, dass nicht auf dem UI-Thread ausgeführt wird.

Der Code, der die Aufgaben hervorgebracht hat, wird im Benutzeroberflächenthread ausgeführt.

Gibt es ein Szenario, in dem das schief geht?

    
Lasse Vågsæther Karlsen 20.03.2013, 13:18
quelle

1 Antwort

4

Vorausgesetzt, Sie verwenden .NET 4.0, gibt es einen Fehler, bei dem% code% im Hauptthread null werden kann und dieses Problem auftreten wird. Wenn Sie das Problem leicht reproduzieren können, überprüfen Sie zunächst, ob System.Threading.SynchronizationContext.Current null ist, wenn Sie SynchronizationContext.Current aufrufen.

Siehe die Details dieses Problems hier: SynchronizationContext.Current ist in Continuation auf dem Hauptthread der Benutzeroberfläche null

Der Fehler ist in .NET 4.5 behoben.

    
Matt Smith 20.03.2013, 13:32
quelle