在窗體上放置一個Timer,ProgressBar和BackgroundWorker。首先你要做的是防止程序啓動時窗體變得可見。將此代碼粘貼到表單類中:
Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
If Not Me.IsHandleCreated Then
value = False
Me.CreateHandle
End If
MyBase.SetVisibleCore(value)
End Sub
使用計時器來啓動作業。設置它的間隔和Enabled屬性,添加Tick事件處理程序:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Show()
ProgressBar1.Visible = True
Me.Enabled = False
BackgroundWorker1.RunWorkerAsync()
End Sub
這使得表格可見,當作業開始並啓動後臺工作。該BGW的WorkerReportsProgress屬性設置爲True,並添加3事件處理程序:
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'' Do stuff here, call BackgroundWorker1.ReportProgress to update the PB
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
ProgressBar1.Visible = False
Me.Enabled = True
Me.Hide()
End Sub
它是由您填寫的DoWork的事件處理程序代碼。讓它做15個工作,一定要調用BackgroundWorker1.ReportProgess,以便進度條得到更新。這是ProgressChanged事件處理程序的功能。 RunWorkerCompleted事件處理程序再次隱藏窗體。
您可以在NotifyIcon的上下文菜單項事件中調用Show()方法,以便用戶可以使表單再次可見。在允許用戶退出應用程序的上下文菜單項中調用Application.Exit()。確保在BGW運行時禁用該功能。或者實施一種乾淨地停止工作的方式。
漢斯,你絕對搖滾=)感謝您的詳細和完整的答案。榮譽給你:) – 2010-11-04 21:43:07