我希望有人能指出我正确的方向;我想我已经接近但我从来没有做过线程并且一直停留在语法/概念上。我相信第一部分是有效的,但是我有一个关于线程所有者的可爱的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
。
上下文是一个实体框架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
InnerException:
这是整个例外,它出现在这里:
For Each t In test
res.Add(t.Person)
Next
我昨晚经历过这些文章,虽然我现在理解它好一点,但我仍然在努力将它应用到存储库类。这通常是语法混淆的结合,而不是我自己得到的。我有一种感觉,我应该能够将getfiltered居民中的部分操作分成等待任务,但还没有成功解决。今天的工作 - 如果实体框架可以这样使用!