L'utilisation de Thread est assez simple
Thread thread = new Thread(MethodWhichRequiresSTA);
thread.SetApartmentState(ApartmentState.STA);
Comment accomplir la même chose en utilisant des tâches dans une application WPF? Voici du code:
Task.Factory.StartNew
(
() =>
{return "some Text";}
)
.ContinueWith(r => AddControlsToGrid(r.Result));
Je reçois une InvalidOperationException avec
Le thread appelant doit être STA, car de nombreux composants d'interface utilisateur l'exigent.
Vous pouvez utiliser TaskScheduler.FromCurrentSynchronizationContext Method pour obtenir TaskScheduler pour le contexte de synchronisation actuel (qui est le répartiteur WPF lorsque vous exécutez une application WPF).
Utilisez ensuite la surcharge ContinueWith qui accepte un TaskScheduler:
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(...)
.ContinueWith(r => AddControlsToGrid(r.Result), scheduler);
Pour tous les futurs visiteurs qui viennent à la recherche de la véritable intention de la question:
StaTaskScheduler
comme indiqué dans cette réponse