BackgroundWorkerでフィルタリングしようとしているWPF ListViewがあります。私のコードは次のようになります。WPF BackgroundWorker 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をフィルタリングするサンプルを知っている人はいますか?
より完全なサンプルを提供できますか?提供されたスニペットでは、私はエラーを再現することができず、別の結果につながることをあまり想定したくありません。 – STW
ありがとう!できるだけ早くより完全なサンプルを取得しようとします。Stackoverflowが質問に大量のコードをダンプするのではなく、ファイルの添付ファイルを受け入れるといいでしょう。 WPF ListViewをフィルタリングするためのBackgroundWorkerのサンプルコードはありますか? – Luke
具体的には、それはクロススレッドの問題であり、より完全なサンプルは、それを修正する方法を教えてくれます。 – STW