2012-07-17 3 views
0

안녕하세요 방법을 아래와 같이있다 :스레딩이 C#에서 올바르게 수행되지 않는 이유는 무엇입니까?

void Foo 
{ 
MethodInvoker method=delegate{ 
frm2 frm=new frm2(); 
frm.show(); 
} 

나는 frm2이 DataGridView를 내부 DB 및로드 데이터에서 무거운 하중을 수행이 양식 내부 DataGridView 컨트롤이 있습니다.

문제는 메인 스레드 (form1 스레드)가 데이터가 frm2.ghy의 datagridview에 연결될 때 정지된다는 것입니다. 이런 일이 발생합니다.

두 개의 서로 다른 프로젝트를 만들고이 두 프로젝트에서 frm2와 form1을 분리하면 결과가 좋으며 아무에게도 고정이 일어나지 않습니다.

답변

6

음, WinForms에서 UI 조작을위한 하나의 스레드가 있다고 생각합니다. Form 생성자 내에서 DB 검색을 수행하는 경우 UI 스레드에서이 작업이 수행되고 모든 양식이 고정됩니다.

DB에서 데이터를 가져오고 UI 스레드의 UI에서 나중에 설정하도록 새 스레드를 만들어야합니다.

관련 문제