我在数据库里查过了。搜索在单独的线程中工作。当实体被发现时,我必须将它和一些相关数据显示到WPF中。
我用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);
}问题是项的导航属性是空。
当我使用Invoke()而不是BeginInvoke()时,一切都很好。由于其他一些原因,我必须准确地使用BeginInvoke()。
有人知道如何在我的情况下使用BeginInvoke()吗?谢谢:)
发布于 2011-11-22 20:15:27
我认为这可能是因为您正在使用lambda函数生成对象。
BeginInvoke被异步地调用,并且可能在被激活时,定位的对象不再在作用范围内。
通过使用Invoke,可以强制在对象仍在作用域中时同步执行调用。
https://stackoverflow.com/questions/8227678
复制相似问题