2012-05-09 3 views
1

데이터베이스에서 xaml 문자열을 검색하고 xaml 캔버스를 구성 중입니다.XamlReader.Parse()는 BackgroundWorker 스레드와 다르게 작동합니까?

호출

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

는 UI 스레드에서 잘 작동합니다. BackgroundWorker 스레드에서 동일한 작업을 수행하려고하면 첫 번째 Canvas 태그를 가리키는 '알 수없는 형식의 Canvas를 만들 수 없음'이라는 메시지와 함께 XamlParseException이 발생합니다.

xaml은 두 경우 모두 동일합니다.

나는 눈이 깜박 거리는 느낌이 들었습니다.

답변

3

(오해의 소지가있는) 특정 오류 메시지가 나타나는 이유를 모르겠지만 비 UI 스레드에서 XAML을로드 할 수는 없습니다. 그렇게해도 WPF 컨트롤에 스레드 선호도가 있으므로 UI ​​스레드에서 사용할 수 없습니다.

비 UI (기술적으로 제한 사항이 "비 STA 스레드")에서로드 할 수없는 이유는 UI 요소가 마샬링 목적을 위해 현재 스레드를 STA로 요구하고 사용자가 현재 MTA 스레드 안에 있습니다. BackgroundWorker이 사용하는 관리되는 스레드 풀에는 MTA 스레드 만 있습니다.

TL; DR : UI 스레드 내에서이 작업을 수행해야합니다.

+0

답변 해 주셔서 감사합니다. 그것은 완벽하게 이해합니다. 그것은 결국 블린딩하게 분명했다.) – fran

관련 문제