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

问题描述 投票:73回答:2

使用线程非常简单

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

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

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

我收到一个InvalidOperationException与>

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

使用线程非常简单。线程=新线程(MethodWhichRequiresSTA); thread.SetApartmentState(ApartmentState.STA);如何在WPF中使用任务来完成同样的工作...

c# wpf multithreading thread-safety task-parallel-library
2个回答
72
投票

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


34
投票

对于以后寻求该问题真正意图的任何来访者:

© www.soinside.com 2019 - 2024. All rights reserved.