1

我正在从数据库中检索 xaml 字符串并构建 xaml 画布。

通话

 loadedCanvas = (Canvas)System.Windows.Markup.XamlReader.Parse(xamlTemplate);

从 UI 线程工作正常。当我尝试从 BackgroundWorker 线程执行相同的操作时,我得到一个 XamlParseException,其中包含指向第一个 Canvas 标记的消息“无法创建未知类型 Canvas”。

两种情况下的 xaml 都是相同的。

我觉得我错过了一些非常明显的东西。

4

1 回答 1

3

我不确定您为什么会收到特定的错误消息(这是误导性的),但您无法从非 UI 线程加载 XAML;即使可以,您也将无法从 UI 线程中使用它们,因为 WPF 控件具有线程关联性。

您无法从非 UI 加载的原因(技术上的限制是“非 STA 线程”)是 UI 元素要求当前线程为 STA 以进行编组,如果您当前位于 MTA 中,则会引发异常线。使用的托管线程池BackgroundWorker只有 MTA 线程。

TL;DR:您需要在 UI 线程中执行此操作。

于 2012-05-09T13:11:13.817 回答