打印

.net里的多线程组件BackgroundWorker

.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

TOP