2014-05-10 5 views
-2

저는 ZedGraph 만 포함하는 사용자 정의 컨트롤이 있습니다.크로스 스레드 작업이 유효하지 않습니다.

additself라는이 사용자 컨트롤에 대한 메서드를 작성하려고하는데,이 폼은 기본 폼의 탭 페이지에 추가됩니다. 이 크로스 스레드 작업이기 때문에

TabPage newpage = new TabPage(); 
newpage.Controls.Add(this.zedGraphControl1); 
(form1.Controls["tableLayoutPanel1"].Controls["tabControl1"] as TabControl).TabPages.Add(newpage); 

,이 오류를하고 내가 어떤 이유로

TabPage newpage = new TabPage(); 
newpage.Controls.Add(this.zedGraphControl1); 
form1.Invoke((MethodInvoker)delegate 
{ 
    (form1.Controls["tableLayoutPanel1"].Controls["tabControl1"] as TabControl).TabPages.Add(newpage); 
}); 

를 추가하여 해결됩니다, 그것은 여전히 ​​스레드에서 액세스 한 zedgraph을 말하는 오류 메시지 제공 에 만들어집니다.

나는이 문제를 어떻게 해결합니까?

+0

새 탭 페이지를 추가 할 때 배경 스레드에서 실제로 많은 시간이 소요됩니까? 어쨌든, 이것은 탭 페이지가 스레드에 의해 소유되도록하지 않을 것이며, 탭 컨트롤은 포 그라운드 스레드에 의해 소유 될 것입니까? –

+0

아마도 잘못된 스레드에서 TabPage를 작성했기 때문에 위임자 안에 TabPage를 넣었을 것입니다. – Silvermind

답변

1

여전히 다른 스레드에서 컨트롤을 만들고 있습니다. 폼에 UI 스레드에 코드를 삽입하기 만하면됩니다. TabPage newpage = new TabPage();으로 시작하는 모든 것을 Invoke()으로 이동하십시오.

관련 문제