2011-08-16 2 views
1

나는 C# 형식을 가지고 있고, 초기화 시간이 오래 걸린다. (서버로부터 정보를 얻고 TreeView를 채우는). 지금 코드는 다음과 유사합니다C# 양식 : 초기화가 오래 걸릴 때 양식을 표시하는 방법은 무엇입니까?

public class myForm : Form 
{ 
    InitializeComponent(); 
    List<Location> locations = getServerLocations(); // Server call 

    foreach(Location loc in locations) 
    { 
     List<POI> POIs = loc.getLocationPOIs(); // Server call 
     foreach(POI poi in POIs) 
     { 
      List<POIDetails> = poi.getPOIDetails(); // Server call 
      .... 
     } 
    } 
} 

당신은 내가 생각 ... 그래서 큰 나무가있는 점을 얻는다면, 나는 사용자가 확장 될 때까지 호출을 끝까지 할 수 없습니다 알고 나무. 그러나 모든 처리와 서버가 실행되는 동안 도구 스트립에 '로드 중 ...'또는 뭔가가 표시되도록 양식이 표시되기를 바랍니다.

지금은 응용 프로그램을 아직로드하지 않은 것 같습니다. 모든 호출이 완료 될 때까지 아무 것도 표시되지 않기 때문입니다.

+0

단일 스레드에서 모든 작업을 수행했기 때문입니다. –

+0

C# 폼이란 무엇입니까? Windows Forms를 의미합니까? –

답변

7

UI 스레드에서 오랫동안 처리하지 말고 대신 BackgroundWorker을 사용하여 다른 스레드로 이동하십시오. 처음에는 "로드 중"화면을 표시 할 수 있으며 일단 백그라운드 작업자가 완료되면 트리 구조로 UI를 업데이트하십시오.

+0

+1. 나를 때려. –

+0

관심이 있으시면 BackgroundWorker를 사용하여 화면을로드 할 때 진행률 표시 줄을 만들 수도 있습니다. – PythEch

2

프로세스의 나머지 부분에서 시간이 걸리는 프로세스를 분리 할 수 ​​있도록 다중 스레드 프로세스로 작업해야합니다. 여기 당신을 도울 수있는 블로그가 있습니다. .NET 4.0 and System.Threading.Tasks

0

별도의 스레드에서 초기화를 실행하는 것이 좋습니다. 하지만 UI 스레드에서 실행하도록 제한되면 양식의 .Show() 또는 .ShowDialog() 호출 직후에 Application.DoEvents()를 호출 해보십시오.

양식이 표시되면 초기화가 완료 될 때까지 사용자 작업에 응답하지 않습니다. 따라서 개별 스레드에서 초기화를 실행하는 것이 더 나은 솔루션입니다.