后台工作进度:如何报告双数而不是整数

时间:2014-03-12 11:49:41

标签: vb.net backgroundworker

我正在VB.net中开发一个窗口应用程序,而我正在使用backgroundworker。 也许这是一个非常简单的问题,但有可能将进度报告为双数而不是进度百分比的整数部分吗?

我需要完整的数字才能显示更多信息,而且只有当我知道算法的确切迭代时才能这样做。

有没有简单的方法呢?

提前致谢!

1 个答案:

答案 0 :(得分:1)

ReportProgress方法有两个重载。 first one仅使用percentProgress As Integer参数,但second one需要额外的userState As Object参数。通过第二次重载,您可以传递任何类型的数据。在您的情况下,您可以传递Double值作为您的用户状态,如此

BackgroundWorker1.ReportProgress(0, myDouble)

然后,在ProgressChanged事件处理程序中,您可以将值转换回Double,如下所示:

Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
    Dim myDouble As Double = CDbl(e.UserState)
    ' ...
End Sub

如上例所示,如果您不需要percentProgress参数,则只能为该参数传递值0。您不仅限于传递一个或两个值。如果需要传递其他信息(例如状态字符串),可以通过创建自己的类来封装所有与状态相关的数据,然后将其中一个对象作为userState参数传递。例如:

Public Class MyUserState
    Public Property MyDouble As Double
    Public Property StatusDescription As String
End Class

然后你可以像这样调用ReportProgress方法:

Dim myState As New MyUserState()
myState.MyDouble = 1.1
myState.StatusDescription = "Test"
BackgroundWorker1.ReportProgress(0, myState)

然后,你可以读取这样的值:

Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
    Dim myState As MyUserState = DirectCast(e.UserState, MyUserState)
    ' ...
End Sub