2009-03-31 8 views
0

Мне нужно сообщить о достигнутом прогрессе. Рассмотрим следующий код:Как сообщить о прогрессе Изменен vb.net?

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 

Как и где я должен подписаться на CalculationProgress событие для вызова

calculationWorker.ReportProgress(MyCalculationProgressEventArgs.Percent) 

?

ответ

0

Вы используете объект BackgroundWorker здесь? Если это так, то вы должны подписаться на событие CalculationProgress внутри обработчика события calculateWorker_DoWork. Вы не размещали никакой информации о 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 
0

Вы сделали бы это после вызова GetCalculator и перед вызовом Calculate.