.net里的多线程组件BackgroundWorker
因为最近做的项目用到progressBar
所以要使用线程来一边执行后台 一边要刷新窗体
推荐使用BackgroundWorker 这也是微软推荐的安全可靠的方式
使用方法:
1.从工具箱中把BackgroundWorker组件拖到你所使用的窗体上,它会隐式的显示,你能够看到它的属性
2. 这个组件主要有三个事件 DoWork,ProgressChanged ,RunWorkerCompleted 事件和一个方法RunWorkerAsync。
DoWork主要处理后台的处理,无法使用任何用户界面对象,因为它在后台线程上运行。。
ProgressChanged 实时通知前台后台的变化,可以使用前台用户界面对象。
RunWorkerCompleted 实现后台完成时接收通知,可使用前台用户界面对象。
RunWorkerAsync方法是BackgroundWorker启动方法。
简单贴段代码()
Public Class frmBAK001
Private LOCAL_STR_BAK_PROCESSING As String = "バックアップしています。"
Private LOCAL_STR_BAK_SUCCESS As String = "バックアップが完了しました。"
Private _logService As New clsLogService
Private _frmId As String = "F_BAK_001"
'
Private Sub frmBAK001_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
Try
Me.lblBackupMessage.Text = LOCAL_STR_BAK_PROCESSING
Me.btnOK.Enabled = False
Me.ControlBox = False
BackgroundWorker1.RunWorkerAsync()
Catch ex As clsBaseException
'共通エラー
_logService.WriteLog(ex, _frmId, clsSysEnv.Instance.LoginUser.Syokuin_name)
Throw New clsCheckException("ERR_COM_002")
Catch ex As Exception
'そ以外エラー
_logService.WriteLog(ex, _frmId, clsSysEnv.Instance.LoginUser.Syokuin_name)
Throw New clsCheckException("ERR_COM_002")
End Try
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Try
Dim backup As New clsBackup
backup.Backup(BackgroundWorker1)
Catch ex As Exception
'そ以外エラー
_logService.WriteLog(ex, _frmId, clsSysEnv.Instance.LoginUser.Syokuin_name)
Throw New clsCheckException("ERR_MNU_004")
End Try
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
Me.pbrBackup.Value = e.ProgressPercentage
If pbrBackup.Value = 100 Then
Me.lblBackupMessage.Text = LOCAL_STR_BAK_SUCCESS
Me.btnOK.Enabled = True
End If
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted If Not e.Error Is Nothing Then
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End If
End Sub
End Class