我在搜索数据库。搜索在单独的线程中工作。 当找到实体时,我必须将它和一些相关数据显示到WPF UI中。
我使用EntityFramework。搜索过程的主要思想是:
foreach (var item in _currentEntitySet)
{
Items.Add(item);
OnItemFound(item);
}
_currentEntitySet
是ObjectQuery
但我遇到了一些问题。当OnItemFound
被触发时,我尝试使用BeginInvoke()
在UI中显示找到的项目和一些相关对象。
private void OnCatalogueItemFound(CatalogueItem item)
{
Application.Current.Dispatcher.BeginInvoke(new Action<object>((param) =>
{
var model = new CatalogueResultItemViewModel(param as CatalogueItem);
TitlesResultViewModel.Add(model);
}), System.Windows.Threading.DispatcherPriority.Background, item);
}
问题是项的导航属性为 NULL
当我使用Invoke()
代替BeginInvoke()
时,情况正常。
由于其他一些原因,我必须使用BeginInvoke()
。
有谁知道如何在我的情况下使用BeginInvoke()
?谢谢:))
答案 0 :(得分:0)
我认为这可能是因为您使用lambda函数生成对象。
BeginInvoke是异步调用的,并且可能在它被操作时,对象所在的位置不再在范围内。
通过使用Invoke,当对象仍在范围内时,强制同步执行调用。