我是否需要 STA 线程来使用不会显示的 WPF 控件?

问题描述 投票:0回答:1

我通过将 WPF 控件放在网格上然后将其保存到文件来创建图像。我从不展示网格。效果很好。

但是当我尝试将其放入

Task
Task.Run
中时,它失败了:

调用线程必须是STA,因为很多UI组件都需要这个

由于我从未显示网格,是否可以通过某种简单的方式来规避此错误,而无需为任务创建单独的线程?我不能在真正的 UI 线程上使用它,这是这里的要求。

c# .net wpf multithreading
1个回答
0
投票

WPF 本身对于多线程来说并不安全,除非是非常特殊且有文档记录的类。 WPF 只能在具有发送消息的调度程序的 STA 线程中使用。不过,每个进程可以有多个 STA 线程和调度程序。

例如,您可能有一个或多个仅渲染图像的后台线程。每个您都将从标记

Thread.SetApartmentState(ApartmentState.STA)
开始,通过访问后台线程上的
Dispatcher.CurrentDispatcher
创建调度程序,并使用
Dispatcher.Run()
发送消息。可以使用
Dispatcher.BeginInvoke
编组工作,并且可以通过调用
Dispatcher.ExitAllFrames()
结束线程。

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