2011-01-14 3 views
1

WPF 3.5アプリケーションでBackGroundWorkerを使用して独自のスレッドで長期実行プロセスを実行し、VS2010でデバッグモードでコードを実行すると、DoWorkおよびRunWorkerCompletedイベントが起動していないようです。BackgroundWorkerイベントが起動しない

Implements INotifyPropertyChanged 

Private WithEvents worker As System.ComponentModel.BackgroundWorker 

Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged 

Private Sub NotifyPropertyChanged(ByVal info As String) 
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info)) 
End Sub 

Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) 
    Dim worker = New System.ComponentModel.BackgroundWorker 
    worker.WorkerReportsProgress = True 
    worker.WorkerSupportsCancellation = True 
    Dim str() = New String() {"IDA00005.dat", "Adelaide"} 
    Try 
    worker.RunWorkerAsync(str) 
    Catch ex As Exception 
    MsgBox(ex.Message) 
    End Try 
End Sub 

Private Sub worker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles worker.DoWork 
    Dim form_Helpder As New test_global 
    Dim ds As DataSet = form_Helpder.getWeatherData(e.Argument(0), e.Argument(1)) 
    e.Result = ds 
End Sub 

Private Sub worker_Completed(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles worker.RunWorkerCompleted 
    If e.Error IsNot Nothing Then 
    MsgBox(e.Error.Message) 
    Else 
    ... 
    NotifyPropertyChanged("lbl_minToday") 
    ... 
    End If 
End Sub 

私はrunworkerasyncでセットアップブレークポイントを持っていると行が、エラーがcatchedされていないと呼ばれているが、サブが終了し、次のよう

私のコードです。私はDoWorkとRunWorkerCompletedサブメニューとWindow_Loadedサブメニューの後にもブレークポイントを設定していますが、デバッガで強調表示されるものは何もないので、イベントが発生していないと仮定しています。

2つの質問があります。私のコードからイベントが発生しないようにするために欠けているものがありますか?また、イベントのサブセットに正しいブレークポイントを設定していますか?

ご提供いただけるご支援をいただければ幸いです。

マット

答えて

4

DoWorkworker_Completedはイベントです。あなたはそれらをワーカーのイベントハンドラに登録して、ワーカーがそれらを起動させる必要があります。

worker.DoWork += worker_DoWork 
worker.RunWorkerCompleted += worker_Completed 

編集:VBで、構文があるように見えます:あなたは労働者のサブルーチンにブレークポイントを設定した場合、あなたの2番目の質問については

AddHandler worker.DoWork, AddressOf worker_DoWork 
AddHandler worker.RunWorkerCompleted, AddressOf worker_Completed 

、はい、デバッガが解除されます。 DoWorkは背景のThreadPoolスレッドで実行されますが、RunWorkerCompletedはUIスレッドで実行されます(これはbackgroundWorkersを非常に便利にします)。

+0

素晴らしいですが、以前はC#のバージョンを見ていましたが、それはC#のことだった。これらの2行を追加すると、あなたのお手伝いをしていただきありがとうございます。 – Lima

関連する問題