私の wpf アプリケーションには 2 つの wpf ウィンドウがあります。
1)ロードボタンをクリックすると、2番目のウィンドウがロードされます。秒ウィンドウの読み込みには 15 ~ 20 秒かかります。
進行状況バーを追加して読み込みウィンドウを表示し、2 番目のウィンドウが読み込まれると進行状況バーを閉じるにはどうすればよいですか。
私の wpf アプリケーションには 2 つの wpf ウィンドウがあります。
1)ロードボタンをクリックすると、2番目のウィンドウがロードされます。秒ウィンドウの読み込みには 15 ~ 20 秒かかります。
進行状況バーを追加して読み込みウィンドウを表示し、2 番目のウィンドウが読み込まれると進行状況バーを閉じるにはどうすればよいですか。
それを実現する方法はたくさんあります。簡単な方法は、進行状況バーまたは待機中のアニメーションを含む 3 番目のウィンドウまたはパネルを作成することです。その 3 番目のウィンドウは、2 番目のウィンドウの読み込みを担当し、最初のウィンドウの読み込みボタンをクリックするとすぐに表示されます。2 つ目のウィンドウの読み込みが完了すると、プログレス バーが表示された 3 つ目のウィンドウが閉じ、2 つ目のウィンドウが表示されます。
お役に立てれば。
私は最近、アプリをクリックしてロードするのに約 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();
}));
}
}