我有一个循环,每秒增加一个进度条值。它工作正常,但如果你单击表单中的任何地方,窗口将变为白色,并显示“YOURTITLEHERE(无响应)”。 这是循环代码:
Private Sub incprogress()
While ProgressBar1.Value < 1000
ProgressBar1.Value += 1
System.Threading.Thread.Sleep(1000)
End While
End Sub
答案 0 :(得分:4)
更好的是,使用每秒滴答一次的计时器。如果你不知道自己在做什么,最好不要使用Threads。
如果您查看工具箱,您将找到一个可以拖动到表单上的Timer控件。 将其间隔设置为1000,启用它,并处理其Tick事件以使事件每秒发生一次。
答案 1 :(得分:1)
如果您想在进度条更新(例如文件中的进程行或等待网络流量)之间执行比休眠更复杂的操作,则可以使用BackgroundWorker而不是Timer。设置起来有点复杂,但它可以让您完成GUI线程的所有繁重工作,以便GUI保持响应。
Public Class Form1
Dim bgw As System.ComponentModel.BackgroundWorker
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
bgw = New System.ComponentModel.BackgroundWorker
bgw.WorkerReportsProgress = True
AddHandler bgw.DoWork, AddressOf bgw_DoWork
AddHandler bgw.ProgressChanged, AddressOf bgw_ProgressChanged
bgw.RunWorkerAsync()
End Sub
Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
While ProgressBar1.Value < 1000
System.Threading.Thread.Sleep(1000) 'Optionally do some useful work here off the UI thread
bgw.ReportProgress(0) 'optionally report a real percentage done
End While
End Sub
Private Sub bgw_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)
If ProgressBar1.Value < 1000 Then
ProgressBar1.Value += 1 'optionally set progress bar to real percentage done
End If
End Sub
End Class