【发布时间】:2011-08-15 19:51:16
【问题描述】:
我的表单上有一个未更新的进度条。
当点击发送电子邮件按钮时,我会这样做:
Public Sub SendMail()
If CheckSettings() = False Then Exit Sub
BackUpEbillFile()
LockForm(True)
StatusBars(1, "Sending emails...")
ProgressBar1.Maximum = intInvoicesToSend
BackgroundWorker1.RunWorkerAsync()
End Sub
我有以下事件:
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
e.Result = SendBills()
End Sub
Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
Console.WriteLine("I DID IT MA!!!!1 status: " & ProgressBar1.Value)
ProgressBar1.PerformStep()
Console.WriteLine("I DID IT MA!!!!2 status: " & ProgressBar1.Value)
End Sub
在邮件类中的 SendBills 中,我这样做:
smtp.Send(msg)
Console.WriteLine("I DID IT PA!!!! count: " & iCount)
frmBilling.BackgroundWorker1.ReportProgress(iCount)
我的问题在于 ProgressChanged 中的 ProgressBar1.PerformStep()。我正在改变进度,但 Progressbar1 没有改变。它保持为零。
- intInvoicesToSend 为 16
- ProgressBar1.Minimum = 0
- ProgressBar1.Maximum = intInvoicesToSend(原为 16)
- ProgressBar1.Step = 1
这是来自 console.writelines 的控制台:
我做到了!!!!计数:0
我做到了!!!!1 状态:0
我做到了!!!!2 状态:1
我做到了!!!!计数:1
我做到了!!!!1 状态:1
我做到了!!!!2 状态:2
我做到了!!!!计数:2
我做到了!!!!1 状态:2
我做到了!!!!2 状态:3
我做到了!!!!计数:3
我做到了!!!!1 状态:3
我做到了!!!!2 状态:4
谁能告诉我我做错了什么? 谢谢!
【问题讨论】:
-
为什么这里的返回不起作用?我把 intInvoicesToSend 是 16 ProgressBar1.Minimum = 0 ProgressBar1.Maximum = intInvoicesToSend(这是 16)ProgressBar1.Step = 1 都放在不同的行...
-
你需要 2 个返回值(中间有空白行),或者格式不同(就像我在编辑中所做的那样,并将它们放在一个列表中,因为我认为它更容易阅读......)
-
LockForm 似乎运行良好,不管它做什么。
-
谢谢里德。我不确定你是什么意思,汉斯,这是个问题吗?如果是这样,那么是的,它只是禁用了屏幕上的几个按钮。
标签: vb.net progress-bar backgroundworker