Wpf XamlReader.Parse()的工作方式是否与BackgroundWorker线程不同?

Wpf XamlReader.Parse()的工作方式是否与BackgroundWorker线程不同?,wpf,xaml,Wpf,Xaml,我正在从数据库中检索一个xaml字符串并构建一个xaml画布 电话 loadedCanvas = (Canvas)System.Windows.Markup.XamlReader.Parse(xamlTemplate); 从UI线程可以很好地工作。当我尝试从BackgroundWorker线程执行相同的操作时,我得到一个XamlParseException,消息“cannotcreateunknown-typecanvas”指向第一个Canvas标记 在这两种情况下,xaml是相同的 我觉得

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

电话

 loadedCanvas = (Canvas)System.Windows.Markup.XamlReader.Parse(xamlTemplate);
从UI线程可以很好地工作。当我尝试从BackgroundWorker线程执行相同的操作时,我得到一个XamlParseException,消息“cannotcreateunknown-typecanvas”指向第一个Canvas标记

在这两种情况下,xaml是相同的


我觉得我忽略了一些显而易见的东西。

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

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


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

谢谢您的回答;这很有道理。这毕竟是显而易见的;)