WPF启动画面和主窗口加载事件

时间:2012-05-23 13:33:06

标签: c# .net wpf xaml

基本上我的应用程序在主窗口的LOADED事件中做了很多事情。

我只希望在此期间显示一些启动画面LOADED事件)并且根本不显示主窗口。

我在这里找到了一些例子http://www.codeproject.com/Articles/38291/Implement-Splash-Screen-with-WPF,但这不是一个好例子。 This提示也不能涵盖我的目的。

此外,我想在启动画面下显示每个阶段我在LOADED事件下所做的事情。所以我想在启动画面中添加状态更新。每个完成的任务都将更新启动画面状态标签。

有任何线索可以做到吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

这是给你的小代码。

  void TemplateSelector_Loaded(object sender, RoutedEventArgs e)
        {
            showWin();

            Thread.Sleep(10000);


            CloseWin();

        }

        private void CloseWin()
        {
            WindowManager.Close();
        }
        Window tempWindow = new Window();
        public void showWin()
        {
            WindowManager.LaunchWindowNewThread<SplashWindow>();

        }
    }

    public class WindowManager
    {
        private static Window win;
        public static void LaunchWindowNewThread<T>() where T : Window, new()
        {
            Thread newWindowThread = new Thread(ThreadStartingPoint);
            newWindowThread.SetApartmentState(ApartmentState.STA);
            newWindowThread.IsBackground = true;

            Func<Window> f = delegate
            {
                T win = new T();
                return win;
            };

            newWindowThread.Start(f);
        }

        private static void ThreadStartingPoint(object t)
        {
            Func<Window> f = (Func<Window>)t;
            win = f();

            win.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            win.Topmost = true;
            win.Show();
            Dispatcher.Run();
        }
        public static void Close()
        {

            if (win != null)
                win.Dispatcher.BeginInvokeShutdown(DispatcherPriority.Send);

        }
    }

您可以根据需要进行修改。

答案 1 :(得分:1)

我在这里找到了一些很酷的解决方案http://plaincolumn.blogspot.com/2009/11/wpf-splash-screen-with-status-update.html

所以它100%满足我的需求。