Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass text parameter to ProgressChanged?

I'm a VB.Net newbie, and need to write a long-running process with a While/End While loop.

To avoid freezing the UI, I added a BackgroundWorker object on the form.

Next, I needed to update the UI, but found that the thread cannot do this. Instead, the thread must call ReportProgress() to trigger the ProgressChanged() event.

However, I need to pass the text from the exception (ex.Message) to the event, but didn't find an example on how to do this. I need that text message to update the form's title bar.

Here's the code:

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    While (True)
        Try
            ...
        Catch ex As Exception
            'Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on.
            'Me.Text = ex.Message

            BackgroundWorker1.ReportProgress(100)
        End Try

        System.Threading.Thread.Sleep(2000)
    End While
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged

        'How to get ex.Message, and change the form's title bar accordingly?
        'Me.Text = ???
End Sub

Thank you.


Edit: Here's how to get the pass the error message to the event, and change the form's title text:

        Catch ex As Exception
            BackgroundWorker1.ReportProgress(100, ex.Message)
        End Try

        System.Threading.Thread.Sleep(2000)
    End While
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
    Me.Text = e.UserState.ToString
End Sub
like image 768
Gulbahar Avatar asked Feb 23 '26 10:02

Gulbahar


1 Answers

The Reportprogress method has an overload that takes a Int32 and an Object parameter. You can pass the message or the complete Exception to the main Thread.

In the ProgressChanged event you can retrieve it from the UserState property.

like image 199
Henk Holterman Avatar answered Feb 24 '26 23:02

Henk Holterman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!