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

使用线程非常简单

 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。

回答:

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

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

var scheduler = TaskScheduler.FromCurrentSynchronizationContext();

Task.Factory.StartNew(...)

.ContinueWith(r => AddControlsToGrid(r.Result), scheduler);

以上是 如何创建运行STA线程的任务(TPL)? 的全部内容, 来源链接: utcz.com/qa/411710.html

回到顶部