我正从数据库中检索xaml字符串并构建xaml画布。
电话
loadedCanvas = (Canvas)System.Windows.Markup.XamlReader.Parse(xamlTemplate);
从UI线程正常工作。当我尝试从BackgroundWorker线程做同样的事情时,我得到一个XamlParseException,消息“无法创建未知类型Canvas”指向第一个Canvas标记。
两种情况下的xaml都是相同的。
我觉得我错过了一些非常明显的东西。
答案 0 :(得分:3)
我不确定您为什么会收到特定的错误消息(这是误导性的),但是您无法从非UI线程加载XAML;即使你可以,你也可能无法在UI线程中使用它们,因为WPF控件具有线程关联性。
您无法从非UI加载(技术上限制是“非STA线程”)的原因是UI元素要求当前线程为STA以用于编组目的,如果您当前正在为该效果抛出异常在MTA线程内。 BackgroundWorker
使用的托管线程池只有MTA线程。
TL; DR:您需要在UI线程中执行此操作。