У меня есть ViewModel, который содержит метод QueryData:Dispatch.BeginInvoke Что я делаю неправильно?
void QueryData() {
_dataService.GetData((item, error) =>
{
if(error != null)
return;
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
foreach(TimeData d in ((LineDetailData)item).Piecesproduced) {
Produced.Add(d);
}
}), DispatcherPriority.Send);
});
}
Этот метод вызывается, каждые 10 секунд из timer_Tick обработчика событий. Затем данные запрашиваются async, а затем выполняется обратный вызов. Там запрошенные данные должны быть вставлены в Observable Collection (а не в STA Thread -> begin Invoke). Он правильно вводит обратный вызов, но код внутри Dispatcher.CurrentDispatcher.BeginInvoke не выполняется.
Что я делаю неправильно?
вещи, которые я хотел бы проверить первое: это 'ошибки == null'? Есть ли элементы в '.Piecesproduced'? Добавление некоторых протоколов поможет диагностировать, что происходит. –
ошибка нет. Выполняется строка Begin Invoke. PiecesProduced содержит элементы. – TheJoeIaut
Что еще происходит в вашем стоп-лотке в этот момент? Ваш код не будет выполнен до тех пор, пока Диспетчер не завершит свое текущее задание - и до этого Диспетчеру необходимо предоставить шанс выполнить. Есть ли что-то еще, что блокирует Диспетчер? Является ли ваш 'timer' фактически' DispatcherTimer', или есть что-то еще долгое время в пользовательском интерфейсе? –