/// <summary>
        ///     加载事件,初始化界面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void MainForm_Load(object sender, EventArgs e)
        {
            InitializeUI();
            InitializeEvents();
            InitServerTime();
            InitBackgroundTask();

            //自动恢复会话
            if (RunTime.SessionManager.Count > 0)
            {
                //tabUser.TabPages.AddRange(RunTime.SessionManager.Select(s => (TabPage)new UserTab(s)).ToArray());
                if (ProgramConfiguration.Instance.EnablePromotion == null)
                {
                    using (InitializingUserPage.Show(this))
                    {
                        RunTime.SessionManager.ForEach(s =>
                        {
                            HandleSession(s);
                            new UserTabDnb(s, st);
                        });
                    }
                }
                else
                {
                    st.SelectedTab = RunTime.SessionManager.Select(s => new UserTabDnb(s, st)).Last();
                }

                RunTime.SessionManager.Where(s => !s.UserProfile.IsPassengerLoaded).ForEach(s => s.AccquireLoadPassengers());
            }

            //在系统关闭时间,自动打开查询页
            var(isOpen, _) = ParamData.GetSystemMaintenanceTime();
            if (!isOpen)
            {
                OpenQueryPageWithoutLogin();
            }
        }
        void HandleGlobalEvents()
        {
            Session.UserLogined += (s, e) =>
            {
                var session = (Session)s;
                //var tab = new UserTab(session);
                //tabUser.TabPages.Add(tab);
                //tabUser.SelectedTab = tab;

                //提示信息。
                if (!session.LoginNotification.IsNullOrEmpty() && ProgramConfiguration.Instance.ShowMessageFrom12306)
                {
                    new MsgFrom12306(session.LoginNotification).ShowDialog(this);
                    session.LoginNotification = null;
                }

                using (InitializingUserPage.Show(this))
                {
                    st.SelectedTab = new UserTabDnb(session, st);
                }
                if (session.UserProfile.Passengers == null || session.UserProfile.Passengers.Any(x => x.TotalTimes == 0))
                {
                    session.AccquireLoadPassengers();
                }
                HandleSession(session);
            };
            Session.UserVerificationStateChanged += (s, e) =>
            {
                var session = s as Session;
                if (session.IsUserVerified == false)
                {
                    this.Invoke(() => new UserNotVerified()
                    {
                        Session = session
                    }.ShowDialog());
                }
            };
            Session.MobileCheckStateChanged += (s, e) =>
            {
                var session = s as Session;
                if (session.IsMobileChecked == false)
                {
                    this.BeginInvoke(new Action(() =>
                    {
                        var tip = new MobileNotChecked(session);
                        if (tip.ShowDialog(this) == DialogResult.Yes)
                        {
                            new AccountMobileCheck(session).ShowDialog(this);
                        }
                    }));
                }
            };
            Session.Logout += (s, e) => this.Invoke(() =>
            {
                var session = s as Session;
                st.Tabs.OfType <UserTabDnb>().FirstOrDefault(x => x.Session == session)?.Remove();
                GC.Collect();
            });
            Session.ForceLogout += this.SafeInvoke(new EventHandler <GeneralEventArgs <bool> >((s, e) =>
            {
                var session = (Session)s;
                if (session == null)
                {
                    return;
                }

                //撤消改签
                session.UserProfile.QueryParams.Where(x => x.Resign).ToArray().ForEach(x => x.IsLoaded = false);

                ni.ShowBalloonTip(5000, "账户已被踢", "账户【" + session.UserKeyData?.DisplayName + "】:您已被踢。如果需要继续订票,请重新登录。", ToolTipIcon.Warning);

                var(isOpen, _) = ParamData.GetSystemMaintenanceTime();
                if (MediaConfiguration.Instance.EnableForceLogoutAudioPrompt && isOpen)
                {
                    LosingSoundPlayer.Instance.PlayAsync();
                }
            }));
            //Session.MayNeedRelogin += (s, e) =>
            //{
            //	var session = s as Session;
            //	if (session == null)
            //		return;

            //	e.Canceled = this.Invoke<Session, bool, bool>(CheckNeedRelogin, session, e.Data);
            //};
            //Session.LoginConflict += (s, e) =>
            //{
            //	this.Invoke(() =>
            //	{
            //		if (!ProgramConfiguration.Instance.DismissedDialogs.Contains("login_confliect"))
            //		{
            //			new LoginConflict().ShowDialog(this);
            //		}
            //	});
            //};
            Session.PreInputedVcMissed += (s, e) =>
            {
                var session = s as Session;
#if DEBUG
                ni.ShowBalloonTip(3000, "验证码已失效", string.Format("账户【{0}】提前输入的验证码已经失效,历时 {1} 分钟", session.UserName, (DateTime.Now - session.LastVerifyCodeInputTime.Value).TotalMinutes.ToString("#0.00")), ToolTipIcon.Warning);
#else
                ni.ShowBalloonTip(2000, "验证码已失效", string.Format("账户【{0}】提前输入的验证码已经失效", session.UserName), ToolTipIcon.Warning);
#endif
            };
            Session.OrderSubmitSuccess += (s, e) =>
            {
            };
            ControllerSession.NotificationCreated += (s, e) => UiInvoke(() =>
            {
                ShowBalloonTip(1500, "订单自动操作通知", e.Data, ToolTipIcon.Warning);
            });
        }