vb.net - 如何将文本参数传递给 ProgressChanged?

标签 vb.net user-interface backgroundworker

我是 VB.Net 新手,需要编写一个带有 While/End While 循环的长时间运行的进程。

为了避免卡住 UI,我在表单上添加了一个 BackgroundWorker 对象。

接下来,我需要更新 UI,但发现线程无法执行此操作。相反,线程必须调用 ReportProgress() 来触发 ProgressChanged() 事件。

但是,我需要将文本从异常(例如消息)传递到事件,但没有找到有关如何执行此操作的示例。我需要该短信来更新表单的标题栏。

代码如下:

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

谢谢。

<小时/>

编辑:以下是如何将错误消息传递给事件,并更改表单的标题文本:

        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

最佳答案

Reportprogress 方法有 an overload它采用 Int32 和 Object 参数。您可以将消息或完整的异常传递给主线程。

在 ProgressChanged 事件中,您可以从 UserState 属性中检索它。

关于vb.net - 如何将文本参数传递给 ProgressChanged?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888138/

相关文章:

c# - BackgroundWorker:从 DoWorkEventHandler 调用的每个方法是否都在后台线程中运行?

html - 无法使用替换从 HTML 中删除不需要的字符

.net - 停止 Response.Redirect 从编码

c# - _ = Task.Run vs async void | Task.Run 与 Async Sub

vb.net - 是否可以重命名 Visual Studio 2010 项目中的 "My Project"文件夹?

javascript - 警告用户他们将丢失数据的最佳实践

C# BackgroundWorker 循环回问题

user-interface - 如何让普通用户图形化地设计 bool 表达式

ios - UISlider 拖动在 iOS 中表现异常

c# - BackgroundWorker 报告来自外部类的进度?