1

データベースからxaml文字列を取得し、xamlキャンバスを作成しています。

呼び出し

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

UIスレッドから正常に動作します。BackgroundWorkerスレッドから同じことを行おうとすると、最初のCanvasタグを指す「不明なタイプのCanvasを作成できません」というメッセージが表示されたXamlParseExceptionが発生します。

xamlはどちらの場合も同じです。

やみくもに明らかな何かが欠けているような気がします。

4

1 に答える 1

3

特定のエラーメッセージ(誤解を招く可能性があります)が表示される理由はわかりませんが、UI以外のスレッドからXAMLを読み込むことはできません。可能であっても、WPFコントロールにはスレッドアフィニティがあるため、UIスレッドからそれらを使用することはできません。

非UIからロードできない理由(技術的には「非STAスレッド」)は、UI要素がマーシャリングの目的で現在のスレッドをSTAにする必要があり、現在MTA内にいる場合はその効果の例外をスローするためです。スレッド。を使用する管理対象スレッドプールにBackgroundWorkerは、MTAスレッドのみがあります。

TL; DR:UIスレッド内からこれを行う必要があります。

于 2012-05-09T13:11:13.817 に答える