Экран-заставка WPF до завершения загрузки Windows

У меня есть приложение, которое потребляет много времени при загрузке окна. В событии Window_load я считываю из базы данных состояние и имя некоторых элементов управления. Я хочу сделать заставку, которая закроется после полной загрузки окна.

Я пробовал использовать этот пример http://www.codeproject.com/KB/dialog/wpf_animated_text_splash.aspx , но экран-заставка закрывается до полной загрузки главного окна, и мое главное окно отображается белым цветом и не загружается полностью.

Я новичок в WPF, и я не знаю, как сделать так, чтобы экран-заставка оставалась на экране пока главное окно не загрузится полностью.

Приведите мне пример.

Код моего экрана-заставки:

public partial class SplashWindow : Window
    {
        Thread loadingThread;
        Storyboard Showboard;
        Storyboard Hideboard;
        private delegate void ShowDelegate(string txt);
        private delegate void HideDelegate();
        ShowDelegate showDelegate;
        HideDelegate hideDelegate;

        public SplashWindow()
        {
            InitializeComponent();
            showDelegate = new ShowDelegate(this.showText);
            hideDelegate = new HideDelegate(this.hideText);
            Showboard = this.Resources["showStoryBoard"] as Storyboard;
            Hideboard = this.Resources["HideStoryBoard"] as Storyboard;

        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            loadingThread = new Thread(load);
            loadingThread.Start();
        }
        private void load()
        {
            Thread.Sleep(6000);

            this.Dispatcher.Invoke(showDelegate, "first data to loading");
            Thread.Sleep(6000);
            //load data 
            this.Dispatcher.Invoke(hideDelegate);

            Thread.Sleep(6000);
            this.Dispatcher.Invoke(showDelegate, "second data loading");
            Thread.Sleep(6000);
            //load data
            this.Dispatcher.Invoke(hideDelegate);


            Thread.Sleep(6000);
            this.Dispatcher.Invoke(showDelegate, "last data loading");
            Thread.Sleep(6000);
            //load data 
            this.Dispatcher.Invoke(hideDelegate);



            //close the window
            Thread.Sleep(6000);
            this.Dispatcher.Invoke(DispatcherPriority.Normal,(Action)delegate() { Close(); });
        }
        private void showText(string txt)
        {
            txtLoading.Text = txt;
            BeginStoryboard(Showboard);
        }
        private void hideText()
        {
            BeginStoryboard(Hideboard);
        }

    }

И этот экран-заставку, который я вызову в своем конструкторе MainWindow:

new SplashWindow().ShowDialog();

Но моя функция загрузки MainWindow будет запущена после того, как окно-заставка закончит работу. показано.

Спасибо!

5
задан zx81 4 August 2014 в 00:00
поделиться