2009-03-31 6 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 

どのように、どこで、私は

calculationWorker.ReportProgress(MyCalculationProgressEventArgs.Percent) 

を呼び出すためにCalculationProgressイベントをサブスクライブする必要がありますか?

答えて

0

ここにBackgroundWorkerオブジェクトを使用していますか?もしそうなら、あなたは、calculateWorker_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 
0

GetCalculatorの呼び出しの後で、Calculateを呼び出す前にこれを行います。

関連する問題