wpf 응용 프로그램에 두 개의 wpf 창이 있습니다.페이지를로드하는 wpf의 진행 표시 줄
1)로드 버튼을 클릭하면 두 번째 창이로드됩니다. secong 창로드에 15-20 초 걸립니다.
로딩 창을 표시하는 데 진행률 막대를 추가하고 두 번째 창이로드 될 때 진행률 표시 줄을 닫을 수 있습니다.
wpf 응용 프로그램에 두 개의 wpf 창이 있습니다.페이지를로드하는 wpf의 진행 표시 줄
1)로드 버튼을 클릭하면 두 번째 창이로드됩니다. secong 창로드에 15-20 초 걸립니다.
로딩 창을 표시하는 데 진행률 막대를 추가하고 두 번째 창이로드 될 때 진행률 표시 줄을 닫을 수 있습니다.
최근에 내 응용 프로그램을로드하는 데 응용 프로그램의 로딩 창에서 작업 중이며로드하는 데 약 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();
}));
}
}
이를 수행 할 수있는 방법은 여러 가지가 있습니다. 쉬운 방법은 진행률 막대 또는 대기 애니메이션이있는 세 번째 창이나 패널을 만드는 것입니다. 세 번째 창은 두 번째 창을로드하는 작업을 담당하며 첫 번째 창에서로드 버튼을 클릭하자마자 표시됩니다. 두 번째 창의로드가 완료되면 진행률 표시 줄이있는 세 번째 창이 닫히고 두 번째 창이 표시됩니다.
희망이 도움이됩니다.
BusyIndicator를 WPF 확장 툴킷의 일부로 사용할 수 있습니다. 다음에서 다운로드 할 수 있습니다. http://wpftoolkit.codeplex.com/wikipage?title=BusyIndicator
값 비싼 처리를하기 전에 새 창을 즉시로드 할 때 IsBusy를 true로 설정할 수 있습니다. 처리가 완료되면, IsBusy를 다시 false로 설정하십시오. 이 방법은 XAML을 2 차 창에서 BusyIndicator로 래핑하는 작업으로, 원하는대로 수행 할 수도 있습니다.