Wpf BackgroundWorker事件未触发
在我的WPF 3.5应用程序中使用BackGroundWorker使长时间运行的进程在自己的线程上运行,当我在VS2010中以调试模式运行代码时,DoWork和RunWorkerCompleted事件似乎不会触发 我的代码如下: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
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的东西。添加这两行代码很有效,非常感谢您的帮助。