확인을 클릭하십시오. 더 이상 오류가 발생하지 않습니다. 그래서 내 문제는 차트가 바인딩 된 값을 바꿀 때 차트를 업데이트하는 것입니다.Control.Refresh() 스레드 간
// 아래에서 무시하십시오.
안녕하세요. 패널이있는 WinForms 응용 프로그램이 있습니다 (panel1
). 배경 스레드는 너무
panel1.Controls.AddRange(myArrayOfControls);
이 잘 작동하고 내 컨트롤이 추가됩니다 볼 수 있습니다처럼 panel1
에 추가됩니다 다른 컨트롤을 만듭니다. 그러나 다른 스레드에서 새 데이터가 들어 오면 컨트롤의 부모 개체에있는 값을 업데이트 한 다음 디스플레이가 새 값으로 업데이트되도록하려면 Refresh()
이 필요합니다. 컨텍스트, 데이터가 들어오는 스레드 또는 업데이트 된 데이터를받는 개체에서 Refresh()
을 호출하면 Invoke가 필요하기 때문에 InvalidOperation 예외가 발생합니다. 내 모델 개체 및 또한 데이터가 들어오는 스레드에서 Invoke를 사용하여 시도하고 오류를 흔들 수없는 것.
누구든지 몇 가지 지침이 있다면 크게 감사하겠습니다.
업데이트 : 여기 조금 더 자세한 정보가 있습니다. 나는 그것을 요구할 것이라고 생각하지 않았지만 나는 틀렸다. :)
나는 개체 클래스 MyObject 있습니다. 이 MyObject 클래스는 topologyThread라는 스레드에서 생성됩니다. dataThread에 데이터가 들어옵니다. MyObject의 인스턴스에는 Panel 인스턴스 변수가 있으며 Panel에는 System.Windows.Forms.DataVisualization.Charting 네임 스페이스의 두 차트를 비롯한 하위 컨트롤이 있습니다. 따라서 dataThread에 데이터가 들어 오면 MyObject 객체의 각 데이터 값을 업데이트 한 다음 차트를 새로 고쳐 업데이트 된 데이터를 표시해야합니다.
데이터가 잘 처리된다는 것을 알고 있습니다. 내 MyObject 클래스에서 속성에 대한 setter의 Console에 새 값을 기록하고 새 값이 표시되는지 확인합니다.
+1, 지금 당신은 10 명의 담당자에게 더 말할 수있는 것에 가깝습니다. :) –