Backgroundworker ReportProgress Стрельба, но ProgressBar не меняется - PullRequest
0 голосов
/ 15 августа 2011

В моей форме есть индикатор выполнения, который не обновляется.

Когда нажимается кнопка «Отправить письмо», я делаю это:

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)

Моя проблема заключается в ProgressBar1.PerformStep () в ProgressChanged. Я добираюсь, чтобы прогресс изменился, но 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

Может кто-нибудь сказать мне, что я делаю не так? Спасибо!

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Я подозреваю, что вы вызываете метод ReportProgress в неправильном экземпляре.

См. Эту строку:

frmBilling.BackgroundWorker1.ReportProgress(iCount)

Если BackgroundWorker определен непосредственно в вашей форме,Вы можете пропустить часть frmBilling и просто указать это как:

BackgroundWorker1.ReportProgress(iCount)

То, как вы это делаете, может вызывать вызов ReportProgress не того экземпляра ...

0 голосов
/ 16 августа 2011

попробуйте это ...

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()
    Application.DoEvents()
    Console.WriteLine("I DID IT MA!!!!2 status: " & ProgressBar1.Value)
End Sub
...