代码之家  ›  专栏  ›  技术社区  ›  Alexander

如何报告更改vb.net的进度?

  •  0
  • Alexander  · 技术社区  · 16 年前

    我需要报告进展的变化。考虑以下代码:

    Public Class Calculator
      Public Event CalculationProgress (ByVal sender As Object, ByVal e As MyCalculationProgressEventArgs)
    Public Function Calculate(..)..
    ' Perform calculation here ...
    ' Reporting proggress
    Dim args As New MyCalculationProgressEventArgs(myobj, myValue)
      RaiseEvent CalculationProgress (Me, args)
    ...
    End Class
    

    Private WithEvents calculator As Calculator
    
    Private Function PerformCalculation(ByVal obj As Object) As CalcParams
    Dim params As CalcParams = CType(obj, CalcParams)
    calculator = GetCalculator()
    ....
    Return params.result = calculator.Calculate
    End Function
    
    Private Sub calculationWorker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) _
    Handles calculationWorker.DoWork
      Dim calcResult As MyType = PerformCalculation(CType(e.Argument, MyType ))
      e.Result = calcResult
    End Sub
    
    Private Sub calculationWorker_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs) _
    Handles calculationWorker.ProgressChanged
         CType(Parent.Parent, MainWindow).pbcCurrentProgress.Value = e.ProgressPercentage
    End Sub
    

     calculationWorker.ReportProgress(MyCalculationProgressEventArgs.Percent)
    

    ?

    2 回复  |  直到 14 年前
        1
  •  0
  •   JaredPar    16 年前

    BackgroundWorker 这里的对象?如果是这样,您要做的是在calculationWorker_DoWork事件处理程序中订阅CalculationProgress事件。您没有在MyType上发布任何信息,所以我假设您需要更改我的代码才能获得Calculator实例。

    Private Sub calculationWorker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) _
      Handles calculationWorker.DoWork  
    
      Dim calcResult As MyType = PerformCalculation(CType(e.Argument, MyType ))  
      Dim calc = calcResult.Calculator
      AddHandler calc.CalculationProgress, AddressOf HandleCalculationProgress
      ...
      RemoveHandler calc.CalculationProgress, AddressOf HandleCalculationProgress
      e.Result = calcResult
    End Sub
    
        2
  •  0
  •   John Saunders    16 年前

    您将在调用GetCalculator之后和调用Calculate之前执行此操作。