WPF BeginInvoke和实体框架

时间:2011-11-22 13:34:20

标签: wpf null begininvoke

我在搜索数据库。搜索在单独的线程中工作。 当找到实体时,我必须将它和一些相关数据显示到WPF UI中。

我使用EntityFramework。搜索过程的主要思想是:

foreach (var item in _currentEntitySet)
{     
    Items.Add(item);
    OnItemFound(item);
}

_currentEntitySetObjectQuery

的位置

但我遇到了一些问题。当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()?谢谢:))

1 个答案:

答案 0 :(得分:0)

我认为这可能是因为您使用lambda函数生成对象。

BeginInvoke是异步调用的,并且可能在它被操作时,对象所在的位置不再在范围内。

通过使用Invoke,当对象仍在范围内时,强制同步执行调用。