2013-07-26 6 views
1

wpf 응용 프로그램에 두 개의 wpf 창이 있습니다.페이지를로드하는 wpf의 진행 표시 줄

1)로드 버튼을 클릭하면 두 번째 창이로드됩니다. secong 창로드에 15-20 초 걸립니다.

로딩 창을 표시하는 데 진행률 막대를 추가하고 두 번째 창이로드 될 때 진행률 표시 줄을 닫을 수 있습니다.

답변

0

최근에 내 응용 프로그램을로드하는 데 응용 프로그램의 로딩 창에서 작업 중이며로드하는 데 약 10 초가 소요됩니다. 중간 로딩 바가있는 로딩 창이 있습니다. 핵심은 로딩 창을 다른 스레드에 놓아 주 스레드에서 다른 창을로드하는 동안 애니메이션을 실행할 수있게하는 것이 었습니다. 문제는 우리가 물건을 유능하게 만드는 것입니다 (마치 창을 닫으면 창을 닫아야 스레드 ... 등).

아래 코드에서 ... LoadingWindow은 진행률 막대가있는 작은 창으로 SecondWindow은로드가 느린 창입니다.

public void OnLoad() 
    { 
     Dispatcher threadDispacher = null; 

     Thread thread = new Thread((ThreadStart)delegate 
     { 
      threadDispacher = Dispatcher.CurrentDispatcher; 
      SynchronizationContext.SetSynchronizationContext(new DispatcherSynchronizationContext(threadDispacher)); 

      loadingWindow = new LoadingWindow(); 
      loadingWindow.Closed += (s, ev) => threadDispacher.BeginInvokeShutdown(DispatcherPriority.Background); 
      loadingWindow.Show(); 

      System.Windows.Threading.Dispatcher.Run(); 
     }); 

     thread.SetApartmentState(ApartmentState.STA); 
     thread.IsBackground = true; 
     thread.Start(); 

     // Load your second window here on the normal thread 
     SecondWindow secondWindow = new SecondWindow(); 

     // Presumably a slow loading task    

     secondWindow.Show(); 

     if (threadDispacher != null) 
     { 
      threadDispacher.BeginInvoke(new Action(delegate 
       { 
        loadingWindow.Close(); 
       })); 
     } 
    } 
0

이를 수행 할 수있는 방법은 여러 가지가 있습니다. 쉬운 방법은 진행률 막대 또는 대기 애니메이션이있는 세 번째 창이나 패널을 만드는 것입니다. 세 번째 창은 두 번째 창을로드하는 작업을 담당하며 첫 번째 창에서로드 버튼을 클릭하자마자 표시됩니다. 두 번째 창의로드가 완료되면 진행률 표시 줄이있는 세 번째 창이 닫히고 두 번째 창이 표시됩니다.

희망이 도움이됩니다.

0

BusyIndicator를 WPF 확장 툴킷의 일부로 사용할 수 있습니다. 다음에서 다운로드 할 수 있습니다. http://wpftoolkit.codeplex.com/wikipage?title=BusyIndicator

값 비싼 처리를하기 전에 새 창을 즉시로드 할 때 IsBusy를 true로 설정할 수 있습니다. 처리가 완료되면, IsBusy를 다시 false로 설정하십시오. 이 방법은 XAML을 2 차 창에서 BusyIndicator로 래핑하는 작업으로, 원하는대로 수행 할 수도 있습니다.