캔버스 개체 (이름 : 캔버스)가 포함 된 WPF 창이 있습니다.캔버스 추가 WPF 스레드에서 자식이 실패했습니다.
사용자가 버튼을 클릭하면 많은 양의 데이터가로드되어 오랜 시간이 걸립니다.
그래서, UI가 고정되어 배경 스레드를 만들지 않습니다.
Thread thread = new Thread(new ThreadStart(BuildGraph));
thread.SetApartmentState(ApartmentState.STA);\
thread.IsBackground = true;
thread.Start();
이 BuildGraph 함수 내에서 데이터를로드하고 일부 셰이프를 만든 다음이 셰이프를 캔버스에 넣습니다. 이러한 모양을 만들려면 스레드가 STA 여야합니다.
디스패처를 사용하여 textBox, progressbar를 업데이트합니다. 모두 괜찮습니다.
String txt = (String)Dispatcher.Invoke(DispatcherPriority.Send, (DispatcherOperationCallback)delegate { return labelStatus.Content; }, null);
레이블 내용을 올바르게 얻을 수 있습니다.
그러나 문제는 UIElementCollection 인 캔버스 Children을 얻을 수 없다는 것입니다.
따라서이 작업은 성공하지 못합니다. canvasChildren = (UIElementCollection) Dispatcher.Invoke (DispatcherPriority.Send, new obtainChildrenDelegate (obtainChildren)));
그리고 이것은 잘못된 여기에 무엇 너무
Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() => canvas.Children.Add(node)));
실패? 캔바스 컨트롤이 아닌 라벨 컨트롤을 얻을 수있는 이유는 무엇입니까?
이상한 점은 Dispatcher의 도움없이 canvas.ActualHeight를 직접 사용할 수 있다는 것입니다.