2009-03-31 5 views
0

Ich muss berichten, dass sich der Fortschritt geändert hat. Betrachten Sie den folgenden Code ein:Wie man den Fortschritt berichtet vb.net geändert?

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 

*** Eine andere Klasse

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 

Wie und wo soll ich CalculationProgress Ereignis abonnieren

calculationWorker.ReportProgress(MyCalculationProgressEventArgs.Percent) 

anrufen?

Antwort

0

Verwenden Sie ein BackgroundWorker Objekt hier? Wenn dies der Fall ist, müssen Sie das CalculationProgress-Ereignis innerhalb des Event-Handlers calculationWorker_DoWork abonnieren. Sie haben keine Informationen zu MyType veröffentlicht, daher nehme ich an, dass Sie meinen Code ändern müssen, um die Calculator-Instanz zu erhalten.

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 
0

Sie würden dies nach Ihrem GetCalculator-Aufruf und vor dem Aufruf von Calculate tun.