当文件加载到网格中时,在vb.net 2008中的Progess栏

时间:2014-10-15 20:33:59

标签: vb.net

我在vb.net上写过进度条。我想的是有一种比这更好的方法。

以下是我的代码:

Private Function ImportDataFiles(ByRef pobjDataLoadDTO As DataLoadDTO) As Boolean
        Try
            lblStatus.Visible = True
            lblStatus.Text = ""
            myProgressBar.Visible = True
            myProgressBar.Value = 0
            For Each drRow As ImportData.TRow In pobjDataLoadDTO.FileInfo.Select("categ_code = 'abc'")
                If pobjDataLoadDTO.FileTimes.ContainsKey(drRow.KEY_CODE) AndAlso _
                    pobjDataLoadDTO.FileTimes(drRow.KEY_CODE) > pobjDataLoadDTO.UploadTimes(drRow.KEY_CODE) Then

                    pobjDataLoadDTO.DestinationTablename = drRow.KEY_CODE

                    If mobjDataLoadBO.ImportDataFiles(pobjDataLoadDTO) Then
                        drRow.DATA_TXT = mobjCommonBO.ONow.ToString
                    End If

                End If
                lblStatus.Text = drRow.KEY_CODE.Trim & "is loading...."
                lblStatus.Refresh()
                myProgressBar.PerformStep()
                lblStatus.Refresh()
            Next
            Return True

        Catch ex As Exception
            Return False
        End Try
    End Function

现在它正在工作,但我想使用更高效的方式,比如使用Backgroundworkerprocess ...等,对此有什么想法?

1 个答案:

答案 0 :(得分:1)

由于你的函数在主线程中运行,我认为你的应用程序在上传过程中是冻结的并且不是很平滑。

1 - 删除表单上的Backgroundworker控件

2 - set" reportProgress"工人的财产为" True"

3 - 将您的循环代码移动到" DoWork"工人控制的事件。并调用worker.RunWorkerAsync。您可以将所需的参数传递给它

4-刷新进度条的代码进入" ProgressChange"工人的事件。这很重要,因为您无法从工作线程调用控件。和ProgressChange正在主线程中运行。您也可以删除"刷新"方法调用。这将不再需要了。每次要刷新进度条时都会调用" ReportProgress"工人的方法

5-Use" RunWorkerCompleted"工作人员事件,进行清理,并隐藏进度条

在启动之前检查工人是否已经工作也是一个好主意,比如



If worker.IsBusy Then
   If worker.CancellationPending = False Then
        worker.CancelAsync()
   End If
   Exit Sub
End If