Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 进度条不更新_Vb.net - Fatal编程技术网

Vb.net 进度条不更新

Vb.net 进度条不更新,vb.net,Vb.net,我需要在加载表单时有一个进度条;我找到了这个代码,但它不起作用;因为进度条不会更新。有人设法解决了这个问题?谢谢 Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork For i = 0 To 100 BackgroundWorker1.R

我需要在加载表单时有一个进度条;我找到了这个代码,但它不起作用;因为进度条不会更新。有人设法解决了这个问题?谢谢

 Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    For i = 0 To 100
        BackgroundWorker1.ReportProgress(i)
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
    ProgressBar1.Value = e.ProgressPercentage
    ProgressBar1.Refresh()
End Sub

  Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOk.Click

    BackgroundWorker1.RunWorkerAsync()
  Dim form2 As New frm2 ()
  form2.Show()
End Sub

尝试将Application.DoEvents添加到循环:

For i = 0 To 100
    BackgroundWorker1.ReportProgress(i)
    Application.DoEvents
next i

你确定它不起作用吗?因为在发布时,它会在一瞬间将您的进度从0更新到100。可能没有足够的时间闪烁一次。你的进度条是1,太快了,2,似乎与加载表单无关。我如何减慢进度条并使加载表单2可见?因为你正在另一个线程中处理,请使用该方法引入延迟。尽管这样做只是随意的,实际上并没有引用任何类型的Progressbar1.Update而不是Refresh。这将使其无效,并将调用draw。还要检查ReporteProgress是否正确,以及backgroundworker的速度是否不像之前所说的那样快。即使这样做会奏效,我也不会建议任何人使用DoEvents,除非在非常罕见的情况下。我过去曾多次被它咬过。我知道有人猜测DoEvents的用途。我在这种情况下使用过它,它在没有引入任何新线程的情况下解决了问题。因为它在单独的线程中运行,所以我只使用Sleep。没有你的行李,我听到了。我刚刚重新编写了一个程序,该程序使用显示的进度条控件更新数据。我将它设置为在一个单独的线程上运行,添加了一些代理,从循环中删除了DoEvents,它工作得很好。如果没有线程,没有DoEvents,进度条控件就不会更新。在VB6中,似乎广泛鼓励使用DoEvents。我怀疑DoEvents的行为在VB6和VB.NET之间发生了变化。它的使用不再受到鼓励,因为框架内还有其他更好的方法来实现相同的目的,而不必承担它可能带来的负担。