C#을 사용하여 WPF appl를 개발 중입니다.진도 막대를 표시하면서 비동기 적으로 stackcontrol에 usercontrols를로드하는 방법
나는 등 비동기 스레딩 및 작업
주위에 내 머리를 얻으려고 노력하고 기본적으로 나는 내 페이지에 StackPanel에 추가하는 것이, UserControl이 있습니다. 스택 패널에이 사용자 컨트롤을 여러 번 반복하여 추가 할 수 있습니다.
i.txtItemDescription.Text = "Item description " + ii.ToString() + ". Put a description here";
i.txtItemTitle.Text = "Item title " + ii.ToString() + ". Put a title here";
MainStack.Children.Add(i);
이 작동합니다. 그러나,이 응용 프로그램을 내 Windows 8.1 태블릿으로 전송하면이 usercontrols (UC)의 표시 속도가 크게 느려집니다.
필자는 데이터 액세스 및 UC 생성이 성능에 미치는 영향이 없으므로 아무 효과가없는 가상화를 사용해 보았습니다. 그것은 화면에 컨트롤의 실제 그림입니다.
- 배경 스레드 도움말 성능이 실행겠습니까 다음과 같이
그래서 제 질문은?
- 그렇다면 BeginInvoke 또는 작업으로 스택 패널을 어떻게로드합니까? 이 사이트에서 언급 한 거의 모든 답변을 시도했는데 STA 오류가 발생하거나 단순히 내가 원하는 것을하지 않습니다.
- 포인트 2에 대한 나의 생각은 스택 패널이로드 될 때까지 대기 진행률 표시 줄 (IsIndefinite = true)을 폼에 표시하고 싶다는 것입니다. 그러나 나는 완전히 엉망이되었다. 모든 경우에 양식 UI는 스택 판넬이 완전히로드 될 때까지 진행률 막대를 업데이트하지 않습니다. 어떤 경우에는 너무 늦었습니다.
의견을 보내 주시면 감사하겠습니다.
Regds
폴
코드 스 니펫은 JS/CSS/HTML 용입니다. 그것은 C#을위한 것이 아닙니다. –
UI 컨트롤은 UI 스레드를 사용하여 '로드'됩니다. 따라서 'ProgressBar'를 사용하는 동안 비동기 적으로로드 할 수 없습니다. Async와 Task는 UI 프로세스가 아닌 비동기 적으로 백그라운드 프로세스를 실행합니다. – Sheridan
스택 패널에 수동으로 컨트롤을 추가하는 특별한 이유가 있습니까? 왜 xaml에서 뷰를 정의하고 (그리고 VirtualizingStackPanel을 사용) 데이터를 바인드 (다른 스레드에서로드 할 수 있습니까) 할 수 있습니까? – Arie