我是新來的異步編程和WP8,這是我的第一個應用程序,我有Dispatcher.BeginInvoke(..)的Windows Phone 8 Dispatcher.BeginInvoke不工作異步
中的一些問題的看法的背後我的代碼類,我試圖在第二個選項卡的數據透視scree異步加載數據。
這裏是我現在所擁有的:
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線程。我在這裏錯過了什麼?
編輯: 這個想法是加載數據異步到ViewModel ObservableCollection這是ModelBinded在XAML。
,如果我嘗試撥打電話異步另一個線程與Task.Factory(...)等讓說,這個崩潰,因爲我改變從另一個線程沒有UI線程的結合。
我沒有看到你的代碼,表明異步使用...'Dispatcher.BeginInvoke'將在UI線程上執行代碼的任何東西,它纔剛剛派往是稍後執行! – 2013-03-01 19:23:07
Hi @PedroLamas。那麼問題是,我如何加載是異步?如果我Task.Factory(..),並嘗試在一個單獨的線程創建它,那麼它將會崩潰,因爲我的列表我更新被綁定到ListBox .. – 2013-03-01 19:27:47
在我看來,使用'Task.Factory'是絕對是最好的可能性在這裏... – 2013-03-01 19:34:36