0

誰かが私を正しい方向に向けてくれることを願っています。私は近づいていると思いますが、スレッド化を行ったことがなく、構文/概念に行き詰まり続けています。最初の部分は機能していると思いますが、スレッドの所有者に関して素敵な WPF エラーがあります。Dispatcher または BackGroundWorker を使用してスレッドにたどり着いたことはなんとなくわかっていますが、時間が不足しています。今夜、一人で解決するにはあまりにも多くの壁にぶつかっています。これが私が失敗している部分です:

 Private Sub FilterData(viewSource As CollectionViewSource, Filter As Expression(Of Func(Of person, Boolean)))
    _repository.GetFilteredPersons(Filter)

    viewSource.Source = _repository.FilteredPersons
End Sub

さて、この次のビットは、A) 動作するか、B) まだ証明していないので、私を騙していると思います:)。

 Public Property FilteredPersons() As ObservableCollection(Of Person)


    Public Async Sub GetFilteredPersons(criteria As Expression(Of Func(Of Person, Boolean)))
        FilteredPersons = Await FilterPersons(criteria)
    End Sub

    Private Async Function FilterPersons(criteria As Expression(Of Func(Of Person, Boolean))) As Task(Of ObservableCollection(Of Person))
        Return Await Run(Function()
                             Dim res = New ObservableCollection(Of Person)

                             _context = New caredocsSQLEntities
                             Dim test = _context.Persons.Where(criteria).Select(Function(o) New With { _
                                  .Person = o, _
                                  .events = o.events.Where(Function(e) e.eventDateTime >= Startdate And e.eventDateTime <= Enddate).OrderByDescending(Function(x) x.eventDateTime)
                             })

                             For Each t In test
                                 res.Add(t.Person)
                             Next
                             Return res
                         End Function
        )
    End Function

最後に、正確なエラーはThe calling thread cannot access this object because a different thread owns itです。

もう一度食べたり読んだりする機会があれば、数時間後にもう一度これに取り組むつもりです. しかし、誰かが私が頭を悩ませている明白な愚かさを教えてくれるなら、むしろ感謝します!!

コンテキストは、子ナビゲーションがフィルタリングされたプロパティを持つEntity Framework 5 ObservableCollectionです-コードがそれを完全に言っているとは思いません:)。

ありがとうございました :)。

要求どおり、例外が発生しました。これは、リポジトリ コードで発生します。スレッドのものは赤いニシンです。

System.InvalidOperationException occurred
HResult=-2146233079
Message=The calling thread cannot access this object because a different thread owns it.
Source=System.Data.Entity
StackTrace:
   at System.Data.Objects.ELinq.QueryParameterExpression.EvaluateParameter(Object[] arguments)
   at System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator()
   at                   System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() at SomeEntity.Models.PersonRepository._Closure$__2._Lambda$__7() in E:\Dropbox\Work         Experimental\SomeEntity - Copy\SomeEntity\Models\PersonRepository.vb:line 30

内部例外:

これは例外全体であり、ここで発生します。

  For Each t In test
          res.Add(t.Person)
  Next

昨夜の記事を読んで、少し理解が深まりましたが、まだリポジトリ クラスに適用するのに苦労しています。これは通常、構文の混乱の組み合わせであり、私の側ではうまく理解できません。getfiltered レジデントの操作の一部を await タスクに分割できるはずだと感じていますが、まだそれを理解できていません。今日の仕事 - エンティティ フレームワークをこのように使用できるかどうか!

4

0 に答える 0