小编典典

如何创建运行STA线程的任务(TPL)?

c#

使用线程非常简单

 Thread thread = new Thread(MethodWhichRequiresSTA);
 thread.SetApartmentState(ApartmentState.STA);

如何在WPF应用程序中使用“任务”完成相同任务?这是一些代码:

Task.Factory.StartNew
  (
    () => 
    {return "some Text";}
  )
   .ContinueWith(r => AddControlsToGrid(r.Result));

我收到一个InvalidOperationException与

调用线程必须是STA,因为许多UI组件都需要STA。


阅读 487

收藏
2020-05-19

共1个答案

小编典典

您可以使用TaskScheduler.FromCurrentSynchronizationContext方法获取当前同步上下文(运行WPF应用程序时是WPF调度程序)的TaskScheduler

然后使用接受TaskScheduler 的ContinueWith重载:

var scheduler = TaskScheduler.FromCurrentSynchronizationContext();

Task.Factory.StartNew(...)
            .ContinueWith(r => AddControlsToGrid(r.Result), scheduler);
2020-05-19