スレッドの使用は非常に簡単です
Thread thread = new Thread(MethodWhichRequiresSTA);
thread.SetApartmentState(ApartmentState.STA);
WPFアプリケーションでタスクを使用して同じことを達成する方法は?コードは次のとおりです。
Task.Factory.StartNew
(
() =>
{return "some Text";}
)
.ContinueWith(r => AddControlsToGrid(r.Result));
私はInvalidOperationExceptionを取得しています
多くのUIコンポーネントがこれを必要とするため、呼び出しスレッドはSTAでなければなりません。
TaskScheduler.FromCurrentSynchronizationContext Method を使用して、現在の同期コンテキスト(WPFアプリケーションを実行しているときのWPFディスパッチャー)の TaskScheduler を取得できます。
次に、TaskSchedulerを受け入れる ContinueWith オーバーロードを使用します。
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(...)
.ContinueWith(r => AddControlsToGrid(r.Result), scheduler);
質問の本当の意図を探しに来る将来の訪問者のために:
StaTaskScheduler
を使用する answer