BackgroundWorker 内でフィルタリングしようとしている WPF ListView があります。私のコードを以下に示します。
Dim Worker As New BackgroundWorker
AddHandler Worker.DoWork, AddressOf Me.FilterAsync
Me.TextBoxText = Me.TextBox.Text
Worker.RunWorkerAsync(Me.TextBox)
Private Sub FilterAsync(ByVal sender As Object, ByVal e As DoWorkEventArgs)
'
Dim BackgroundWorker As BackgroundWorker = CType(sender, BackgroundWorker)
Dim Text As String = e.Argument.ToString
'
Dim ListView As ListCollectionView = CType(CollectionViewSource.GetDefaultView(Me.ListView.ItemsSource), ListCollectionView)
If Text <> String.Empty Then
ListView.Filter = New Predicate(Of Object)(AddressOf Me.FindItemsAsync)
Else
ListView.Filter = Nothing
End If
'
End Sub
このコードはフィルタリングを通過しますが、「別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません」というエラーで失敗します。次の行で:
ListView.Filter = New Predicate(Of Object)(AddressOf Me.FindItemsAsync)
ここで何が問題になるでしょうか?BackgroundWorker でフィルタリングしたサンプルが見つからないようです。
更新: BackgroundWorker を使用して WPF ListView をフィルター処理するサンプルを知っている人はいますか?