내가 비동기 프로그래밍과 WP8 새로운 오전, 이것은 내 첫 번째 응용 프로그램입니다 내가보기 뒤에 내 코드에서 Dispatcher.BeginInvoke (..)윈도우 폰 8 Dispatcher.BeginInvoke 작동하지 않는 비동기
몇 가지 문제를 가지고 클래스, 두 번째 탭에 대한 피벗 비동기 비동기로 데이터를로드하려고합니다.
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 : XAML에서 ModelBinded 인 ViewModel ObservableCollection에 비동기 데이터를로드하는 것이 아이디어입니다.
Task.Factory (...) 등이있는 다른 스레드에서 비동기 호출을 시도하면 UI 스레드가 아닌 다른 스레드에서 바인딩을 변경하면서 충돌이 발생합니다.
내가 Dispatcher.BeginInvoke'는 UI 스레드에서 코드를 실행합니다'... 비동기 사용을 제안 코드에 아무것도 표시되지 않습니다, 단지로 파견 점점 나중에 실행! –
안녕하세요 @PedroLamas. 그러면 질문은 어떻게로드 할 수 있습니까 비동기? Task.Factory (..)로 시도하고 별도의 스레드에서 만들면 업데이트하는 목록이 ListBox에 바인딩되어 있기 때문에 충돌이 발생합니다 .. –
'Task.Factory'를 사용하는 것이 확실히 최선의 가능성은 여기에 ... –