Имейте в виду, что изменился не только API (принятие API из приложений WindowsStore), но и способ получения Dispatcher в windowsPhone 8.0.
Предложение @Johan Faulk, хотя и сработает, может вернуть null при множестве условий.
Старый код для захвата диспетчера:
var dispatcher = Deployment.Current.Dispatcher;
or
Deployment.Current.Dispatcher.BeginInvoke(()=>{
// any code to modify UI or UI bound elements goes here
});
Новое в Windows 8.1 Развертывание не является доступным объектом или пространством имен.
Чтобы убедиться, что диспетчер Main UI Thread получен, используйте следующее:
var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
or
CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
()=>{
// UI code goes here
});
Кроме того, хотя метод ГОВОРИТ, что он будет выполняться асинхронно, ключевое слово await нельзя использовать в методе, вызываемом RunAsync. (в приведенном выше примере метод является анонимным).
Чтобы выполнить ожидаемый метод внутри анонимного метода выше, украсьте анонимный метод внутри RunAsync() ключевым словом async.
CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
**async**()=>{
// UI code goes here
var response = **await** LongRunningMethodAsync();
});
person
Zack Weiner
schedule
25.06.2014