2013-07-18 2 views
1

메인 UI 폼이 C#에서로드되기 전에 많은 문자열 (하나는 +70,000 값)을 가진 몇 개의 콤보 박스를로드합니다. tabControl의 별도 tabPages에 콤보 박스가 있습니다. UI 양식이 표시 될 때 탭 및 콤보 상자가 표시되는 데 지연이 없도록이 작업을 수행하고 있습니다.tabControls 및 Combobxes의 지연로드 극복하기

자, 문제는 첫 번째 tabPage가 잘 돌아가고 빠르게 나타납니다. 그러나 다른 콤보 박스가 포함 된 다른 tabPages는 완전히 렌더링되고 표시되기까지 최대 10 초가 걸립니다.

UI 폼을로드하기 전에 CreateControl을 사용하여 컨트롤 (콤보 상자)을 만들려고했지만 도움이되지 않았습니다. 나는 C# tabControls가 이것을 "게으른 로딩"동작이라고 이해합니다. "게으른"기능을 극복하여 양식이 표시되기 전에 콤보 박스가 만들어지고 렌더링되도록하고 어떻게 다른 탭 페이지로 변경할 때 지연이 없는지 궁금합니다.

는 [이제 태그를 편집 해 -이 관련 윈폼입니다.]

덕분에, 나는 당신의 문제를 극복 할 수있는 개념이 될 것이다 스레딩 같아요

+0

제목과 관련하여 winforms와 관련이 없지만 문제의 UI 프레임 워크 (WinForms, WebForms, ASP.NET, Silverlight, MVC 등)에 질문 태그를 추가하여 혼동을 피할 수 있습니다. 대답하기에 가장 적합한 사람들에게 질문하십시오. –

+0

100,000 개의 항목이 있고 UI 가상화를 사용할 수있는 WPF ComboBox (http://pastebin.com/SrqFttbN) (http://www.youtube.com/watch?v = D3Y6DnFpHCA) 내 컴퓨터에서로드 시간은 0.0053 초입니다. 여기서 가장 좋은 옵션은 [ElementHost] (http://msdn.microsoft.com/en-us/library/system.windows.forms.integration.elementhost.aspx)를 사용하고 WPF ComboBox를 (기존의?) winforms 응용 프로그램. 그것은 winforms에서 좋은 아무것도 얻을 수있는 유일한 방법입니다. –

답변

0

합니다. 폼이로드 될 때 새 스레드를 시작할 수 있습니다. 스레드가 콤보 상자 채움 또는 필요한 작업을 수행하게하십시오.

이 스레드는 모든 콤보 상자를 비동기 적으로 업데이트합니다. 따라서 폼이로드 될 때 지연이 없습니다. 짧은 스레드 예제가 아래에 나와 있습니다. 나는 이것이 당신에게 cent %를 도울다는 것을 짐작한다! 내가 년에 다시 내 응용 프로그램에서 구현 할 때 내가 거기에서 코드를 언급 한대로

public class MyClass 
{ 
    private volatile bool _KillThread; 

    // This method will be called when the thread is started. 
    public void DoWork() 
    { 
     while (!_KillThread) 
     { 
      //Do your work 
     } 

    } 
    public void RequestStop() 
    { 
     _KillThread= true; 
    } 

} 

static void MyFunction() 
{ 
     MyClassworkerObject = new MyClass(); 
     Thread workerThread = new Thread(workerObject.DoWork); 

     // Start the thread. 
     workerThread.Start(); 

     while (!workerThread.IsAlive); 
      // allow the worker thread to do some work: 
      Thread.Sleep(1); 

     // Request that the worker thread stop itself: 
     workerObject.RequestStop(); 

     //Wait untill the worker thread joins it self to main thread 
     workerThread.Join(); 

} 

당신은 MSDN에서 비슷한 예를 찾을 수 있습니다.

Cheeerss !!

+0

주석을 주셔서 고마워, 스레드 문제는 탭 컨트롤이로드하려고하기 전까지는 탭 컨트롤이 항목을 콤보 상자에로드하지 않기 때문입니다. 내 양식/탭 페이지가 나타나지 않고 콤보 상자가 항목을 가져 오는 데 시간이 걸리는 것을 좋아하지 않습니다. 페이지가 표시 되 자마자 사용자가 콤보 상자를 클릭하면 어떻게됩니까? WPF에 대한 경험이 없지만 시도해 볼 가치가 있습니다. 감사합니다. –