2014-07-19 3 views
0

나는 캔버스를 가지고있다. 100 줄과 타원. 이제이 캔버스를 WrapPanel에 100 개 추가합니다. 이 과정은 ca. 4-5 초. 캔버스 비동기를 추가 /로드하는 방법이 있습니까? 그렇게 할 방법을 찾지 못했고 Dispatcher.Invoke가 작동하지 않습니다 (비동기 적이기 때문에). 어떤 제안에 대한아이들을 그리드 비동기에 추가하는 방법?

감사합니다 ...

답변

1

비동기 내가 질문을 읽을 때 모든 트리거하는 UI로 UI 요소의 수천을 추가하는 것처럼 소리, 여기에 솔루션입니다 확실하지.

아직도 많은 계속하지하지만 ...

성능이 향상됩니다 다른 곳에서 오프로드 할 수 있도록 모든 작업은 하나 개의 UI 스레드가있다.

  • 로직에 Debug.WriteLine을 추가하고 StopWatch 객체를 사용하여 타임 스탬프를 지정해보십시오. 지연이 생성되는 곳을 추적 할 수 있습니다.
  • 줄과 타원을 설정하는 코드를 검토하십시오. 크기와 위치와 같은 속성을 어떻게 계산하고 있습니까? 비동기식 Task 메소드를 사용하여 배열에로드 할 수 있다면 응답 성을 되 찾을 수 있습니다.
  • 은 동시에 화면에서 볼 수있는 모든 요소입니다. 그렇지 않은 경우 가상화 패널을 사용하여로드하는 것만로드하십시오.

포인터가 더 필요하면 코드를 공유해야 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 하나의 캔버스에 10 개의 타원과 20 개의 줄이있는 UserControl이 있습니다. 이제 MyWrapPanel.Add (New MyUserControl)와 함께 이러한 UserControls를 100 개 추가합니다. –

+0

내 대답을 편집했습니다 – kidshaw

+0

나는이 모든 방법을 시도했습니다. 두 번째 방법을 선호하지만 비 STA (?) 스레드에서 새 타원/선 개체를 만들 수는 없습니다 ... –

관련 문제