내 응용 프로그램의 주 스레드에서 처리되고 렌더링되고 표시되는 WPF 컨트롤이 있습니다. 이 컨트롤은 수천 개의 데이터 포인트를 "레이어"라는 개체의 뷰로 업로드합니다. 이 "레이어"객체의 생성 과정부터다중 스레드 환경 문제
public class WPFControl{
private List<Layer> myLayers;
public List<Layer> MyLayers{
get{ return myLayer;}
}
...
}
public class Layer{
private List<DataPoint> myDataPoints;
public List<DataPoint> MyDataPoints{
get{ return myDataPoints;}
}
...
}
public class DataPoint{
....
}
때문에 읽고 업로드 할 수있다 DataPoint에 수천의 시간은 내가, 걸립니다 다음은 객체/클래스 계층 구조처럼 보이는 방법에 대한 대략적인 설명입니다 그 레이어 객체를 다른 스레드에 생성합니다. 그건 잘 작동하고 레이어 개체를 매우 잘 반환합니다.
myWpfControl.MyLayers.Add(layerCreatedInOtherThread);
WPF 컨트롤 불이 오류 :
The calling thread cannot access this object because a different thread owns it
내가 좋아, 그럼 내가 사용할 수있는 생각을 나는 다음과 같이 표시 할 행하고자 시도 WPF 컨트롤에 추가 할 때 문제는 다음과 같은 운영자 :
myWpfControl.Dispatcher.Invoke((Action)
(()=>{
myWpfControl.MyLayers.Add(layerCreatedInOtherThread);
})
);
하지만 계속 동일한 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있을지 생각해?
이 작업을 수행 할 수 없습니다. UI는 데이터가 아닙니다. 백그라운드 스레드에서 데이터를 가져오고 데이터는 절차 코드로 조작하는 대신 UI를 바인딩합니다. –
'다른 스레드에서 해당 레이어 객체를 생성합니다. '코드를 표시하십시오. –
우선 순위 바인딩 및 백그라운드 작업자를 찾습니다 – Paparazzi