Wpf BackgroundWorker事件未触发

Wpf BackgroundWorker事件未触发,wpf,backgroundworker,Wpf,Backgroundworker,在我的WPF 3.5应用程序中使用BackGroundWorker使长时间运行的进程在自己的线程上运行,当我在VS2010中以调试模式运行代码时,DoWork和RunWorkerCompleted事件似乎不会触发 我的代码如下: Implements INotifyPropertyChanged Private WithEvents worker As System.ComponentModel.BackgroundWorker Public Event PropertyChange

在我的WPF 3.5应用程序中使用BackGroundWorker使长时间运行的进程在自己的线程上运行,当我在VS2010中以调试模式运行代码时,DoWork和RunWorkerCompleted事件似乎不会触发

我的代码如下:

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上设置了断点,并调用了该行,没有捕获错误,但子行结束。我在DoWork和RunWorkerCompleted子节点上也设置了断点,在窗口加载子节点结束后,调试器不会突出显示任何其他内容,因此我只假设没有触发事件

我有两个问题,我的代码中是否缺少任何可以使事件不触发的东西,在事件子节点上设置断点是否是正确的调试方法

如能提供任何帮助,我们将不胜感激


Matt

DoWork
worker\u Completed
是事件。您必须将它们注册到工人的事件处理程序中,工人才能触发它们

worker.DoWork += worker_DoWork
worker.RunWorkerCompleted += worker_Completed
编辑:在VB中,语法似乎是:

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

至于第二个问题,是的,如果在辅助子程序上设置断点,调试器将中断
DoWork
在后台线程池线程上运行,而
RunWorkerCompleted
则在UI线程上启动并运行(这正是backgroundWorkers如此有用的原因)。

DoWork
worker\u Completed
是事件。您必须将它们注册到工人的事件处理程序中,工人才能触发它们

worker.DoWork += worker_DoWork
worker.RunWorkerCompleted += worker_Completed
编辑:在VB中,语法似乎是:

AddHandler worker.DoWork, AddressOf worker_DoWork
AddHandler worker.RunWorkerCompleted, AddressOf worker_Completed
至于第二个问题,是的,如果在辅助子程序上设置断点,调试器将中断
DoWork
在后台线程池线程上运行,而
RunWorkerCompleted
在UI线程上运行(这就是backgroundWorkers如此有用的原因)。

太好了,我以前看过C版本,但我无法让它运行,所以我认为它是C的东西。添加这两行代码很有效,非常感谢您的帮助。太好了,我以前看过C版本,但我无法让它工作,所以我认为它是C的东西。添加这两行代码很有效,非常感谢您的帮助。