Я новичок в асинхронном программировании и WP8, это мое первое приложение, и у меня есть некоторые проблемы с Dispatcher.BeginInvoke (..)Windows Phone 8 Dispatcher.BeginInvoke не работает асинхронной
В моем коде позади зрения class, я пытаюсь загрузить данные в Pivot scree async для второй вкладки.
Вот что я имею сейчас:
public partial class ReminderPivot : PhoneApplicationPage
{
#region Reminder Members
private ReminderViewModel _model;
private IRepository _repository;
#endregion Reminder Members
#region Constructors
public ReminderPivot()
{
InitializeComponent();
_model = new ReminderViewModel();
_repository = new LocalStorageRepository();
LoadData();
LoadAsyncData();
this.DataContext = _model;
}
#endregion Constructors
public void LoadData()
{
IEnumerable<Reminder> activeList = _repository.GetRemindersByStatusId(2);
if (activeList != null)
{
foreach (var reminder in activeList)
{
_model.ActiveReminders.Add(reminder);
}
}
}
public void LoadAsyncData()
{
Action action =() =>
{
Thread.Sleep(5000);
IEnumerable<Reminder> inactiveList = _repository.GetRemindersByStatusId(3);
if (inactiveList != null)
{
_model.InctiveReminders = new System.Collections.ObjectModel.ObservableCollection<Reminder>(inactiveList);
}
};
Dispatcher.BeginInvoke(action);
}
Дело в том, что это по-прежнему блокирует мой UI поток. Что мне здесь не хватает?
EDIT: Идея состоит в том, чтобы загрузить данные async в ViewModel ObservableCollection, который является ModelBinded в XAML.
Если я попытаюсь сделать асинхронный вызов в другом потоке с помощью Task.Factory (...) и т.д., скажем, это сбой, поскольку я изменяю привязку из другого потока, а не потока пользовательского интерфейса.
Я не вижу ничего в коде, который предполагает использование асинхронного ... 'Dispatcher.BeginInvoke' будет выполнять код в потоке пользовательского интерфейса, это только получение послан, чтобы быть выполненный позже! –
Привет @PedroLamas. то вопрос в том, как я могу загрузить async? Если я попытаюсь с Task.Factory (..) и создать его в отдельном потоке, то он будет сбой, потому что мой список, который я обновляю, привязан к ListBox. –
Мне кажется, что использование 'Task.Factory' является определенно лучшая возможность здесь ... –