Vb.net 数学。用progressbar循环
我使用此代码列出目录中的文件:Vb.net 数学。用progressbar循环,vb.net,math,rounding,Vb.net,Math,Rounding,我使用此代码列出目录中的文件: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click rslts = New List(Of String) foo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
rslts = New List(Of String)
foo(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
ListBox1.Items.Clear()
ListBox1.Items.AddRange(rslts.ToArray)
End Sub
Dim rslts As List(Of String)
Private Sub foo(ByVal aDir As String)
Try
Dim di As New IO.DirectoryInfo(aDir)
Dim aryFiles() As IO.FileInfo = di.GetFiles("*.*")
Dim aryDirs() As IO.DirectoryInfo = di.GetDirectories()
For Each fi As IO.FileInfo In aryFiles
rslts.Add(fi.FullName)
Next
For Each d As IO.DirectoryInfo In aryDirs
foo(d.FullName)
Next
Catch ex As Exception
End Try
End Sub
我不想使用Math.Round()
,这样我可以在加载文件时向progressbar添加增量。我知道我需要使用计时器,但我不熟悉Math.Round()
因此,基本上,在将文件加载到listbox时,我不需要真正的progressbar。您不需要执行增量计算,
progressbar
会处理所有事情。如何将它(ProgressBar1
)与您的代码一起使用:
Private Sub foo(ByVal aDir As String)
Try
Dim di As New IO.DirectoryInfo(aDir)
Dim aryFiles() As IO.FileInfo = di.GetFiles("*.*")
Dim aryDirs() As IO.DirectoryInfo = di.GetDirectories()
With ProgressBar1
.Minimum = 0
.Maximum = aryFiles.Count + aryDirs.Count
.Value = 0
.Step = 1
End With
For Each fi As IO.FileInfo In aryFiles
rslts.Add(fi.FullName)
ProgressBar1.PerformStep()
Next
For Each d As IO.DirectoryInfo In aryDirs
foo(d.FullName)
ProgressBar1.PerformStep()
Next
Catch ex As Exception
End Try
End Sub
我应该在timer sub或foo sub中使用它吗?如果我在foo sub中使用它,它只会填充进度栏。@Jedi你打算如何使用计时器?在循环中?计时器仅在循环结束后调用,因此每个循环仅调用一次。我的代码应该包含在您的代码中(在
foo
)。@Jedi-您可能需要在调用PerformStep后调用ProgressBar1.Update(),以使进度条反映其新值。@ChrisDunaway如果您测试此代码,您会发现它工作正常。如果您查看MSDN示例代码(),您还将看到没有对该调用的引用。一般来说,我只在确认给定控件确实需要它们(ProgressBar不是这样)或在GUI上执行许多可能建议处于最安全状态的“变体”时才使用这种方法(.Update(),.Refresh())。但是,总的来说,我打算避免这种情况,并且从不推荐不需要的东西。@varocarbas-不可否认,我没有按照介绍的方式测试代码。根据绝地的第一条评论,在For循环结束之前,用户界面似乎没有得到更新,所以我建议进行刷新调用。正如您所知,当代码在紧密循环中运行时,UI通常不会得到更新,因为消息队列没有得到处理。对于PerformStep方法,该方法在内部使用PBM_SETPOS值调用SendMessage,这会导致进度条立即自我更新。