WPF 程序启动异步线程显示加载动画

WPF 程序启动异步线程显示加载动画

思路
WPF 程序启动异步线程显示加载动画_第1张图片

  • WPF UI界面必须在STA线程中才能进行创建,因此加载动画所在的线程要创建为STA线程;
  • 在程序主界面加载完成后需要将其带到最上层显示,需要调用Win32 api来实现;
  • 加载界面关闭也需要在其所在的线程关闭,因为需要调用其Dispatcher来关闭。

App.xaml.cs代码如下

 public partial class App : Application
    {
        SplashWindow splash = null;
        MainWindow window = null;
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Thread thread = new Thread(() =>
            {
                splash = new SplashWindow();
                splash.ShowDialog();
            });
            thread.SetApartmentState(ApartmentState.STA);

            thread.Start();
            window = new MainWindow();
            MainWindow = window;
            window.Show();
            window.ContentRendered += (s, ev) =>
            {
                CloseSplash();
                IntPtr handle = new WindowInteropHelper(MainWindow).Handle;
                SetForegroundWindow(handle);
            };
        }

        void CloseSplash()
        {
            splash.Dispatcher.Invoke(() =>
            {
                splash.Close();

            });
        }

        [DllImport("user32.dll")]
        static extern bool SetForegroundWindow(IntPtr hnd);
    }

代码中的SplashWindow 为加载动画窗口,这部分可以自己定义。

你可能感兴趣的:(WPF技术,多线程,wpf,c#)