WPF BeginInvoke и EntityFramework - PullRequest
       8

WPF BeginInvoke и EntityFramework

2 голосов
/ 22 ноября 2011

У меня есть поиск по базе данных.Поиск работает в отдельной теме.Когда сущность найдена, я должен показать ее и некоторые связанные данные в WPF UI.

Я использую EntityFramework.Основная идея процесса поиска:

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

Где _currentEntitySet - это ObjectQuery

Но я столкнулся с некоторыми проблемами.Когда срабатывает OnItemFound, я пытаюсь использовать BeginInvoke() для отображения найденного элемента и некоторых связанных объектов в пользовательском интерфейсе.

    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);
    }

Проблема заключается в том, что навигационные свойства item являются NULL

Когда я использую Invoke() вместо BeginInvoke(), все работает нормально.Я должен использовать точно BeginInvoke() по другим причинам.

Кто-нибудь знает, как я могу использовать BeginInvoke() в моей ситуации?Спасибо:)

1 Ответ

0 голосов
/ 23 ноября 2011

Я думаю, что это может быть потому, что вы генерируете свой объект с помощью лямбда-функции.

BeginInvoke вызывается асинхронно, и, возможно, к моменту действия объект находится больше не в области действия.

Используя Invoke, вы заставляете вызов выполняться синхронно, когда объект находится в области видимости.

...