標準做法
- 創建一個 Splash Form (Form_Splash),放置 ProgressBar、Label 顯示進度。
- 在
Sub Main 中:
Sub Main()
Load Form_Splash
Form_Splash.Show vbModal ' 模態顯示,阻塞主線程
' 在 Form_Splash 的 Form_Load 或 Timer 事件中異步初始化主窗體控件
' 更新 ProgressBar
Unload Form_Splash
Load Form_Main
Form_Main.Show
End Sub
Form_Splash 關鍵代碼
Private Sub Form_Load()
' 啟動初始化定時器,避免界面凍結
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Static step As Integer
step = step + 1
Select Case step
Case 1: lblStatus.Caption = "正在載入數據庫連接..." : InitDatabase
Case 2: lblStatus.Caption = "正在載入第三方控件..." : LoadOCXControls
Case 3: lblStatus.Caption = "正在讀取配置..." : LoadConfig
Case 4:
Timer1.Enabled = False
Me.Hide ' 隱藏啟動畫面,返回 Main 繼續執行
End Select
ProgressBar1.Value = step * 25
End Sub
判斷控件加載成功
- 每個初始化函數(
InitDatabase 等)返回 Boolean 或拋錯誤。
- 若失敗,在 Splash 顯示錯誤訊息,記錄日誌,
End 程序或重試。
- OCX/ActiveX 控件加載可用
On Error Resume Next 捕獲 Err.Number 判斷。
注意
- VB6 單線程,耗時操作必須用
DoEvents 或定時器分步,否則 Splash 界面會凍結無法繪製進度條。
- 現代開發建議遷移至 VB.NET / C#,使用
Task.Run + IProgress 實現真正異步載入。