主要思路是用户身份验证和数据拉取放在 BackgroundWorker 的 DoWork 事件里 (也可以自己手动创建一个线程,但需要多写一些代码),在 RunWorkerCompleted 事件里启动 Timer ,然后将显示主界面代码放在 Timer 的 Tick 事件里.
这样可以解决调试过程中出现异常时无法定位到异常代码处的问题
使用 Invoke 替代 Timer 的 Tick 事件,异常时会跳转到 Invoke 语句,而不会跳转到异常代码处
使用 Timer 后
动画效果
参考代码