2012-05-09 11 views
1

私はデータベースからxaml文字列を取得し、xamlキャンバスを構築しています。XamlReader.Parse()はBackgroundWorkerスレッドとは異なる動作をしますか?

コール

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

は、UIスレッドから正常に動作します。私はBackgroundWorkerスレッドから同じことをしようとすると、最初のCanvasタグを指している 'Unkown type Canvasを作成できません'というメッセージでXamlParseExceptionが発生します。

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

私は何かがぼんやりとしていることが分かりません。

答えて

3

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

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

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

+0

お返事ありがとうございます。完璧な意味合いがあります。結局のところ明らかに明白であった;) – fran

関連する問題