Новые API для Windows Phone 8.1
Я пытаюсь использовать эти два метода (WP 8) в Windows Phone 8.1, но он дает ошибку и не компилируется, скорее всего, из-за их удаления. Я попробовал поиск новых API, но не смог получить. Каковы другие альтернативы для них.
Dispatcher.BeginInvoke( () => {});
ссылка msdn
System.Threading.Thread.Sleep();
ссылка msdn
Ответы
Ответ 1
Они все еще существуют для приложений Windows Phone 8.1 SIlverlight, но не для приложений Windows Phone Store. Замена для приложений Windows Store:
Сон (см. Thread.Sleep замена в .NET для Windows Store):
await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(30));
Диспетчер (см. Как работает Deployment.Current.Dispatcher.BeginInvoke в приложении для хранения Windows?):
CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { });
Ответ 2
Dispatcher.BeginInvoke( () => {});
заменяется на
await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => {});
и System.Threading.Thread.Sleep();
заменяется на
await Task.Delay(TimeSpan.FromSeconds(doubleValue));
Ответ 3
Имейте в виду, что API не только изменил API (использование API из приложений WindowsStore), но и то, как был удален Диспетчер в 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. Развертывание не является доступным объектом или пространством имен.
Чтобы убедиться, что диспетчер потоков основного пользовательского интерфейса получен, используйте следующее:
var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
or
CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
()=>{
// UI code goes here
});
Кроме того, хотя метод SAYS будет выполнен с использованием Async, ключевое слово await не может использоваться в методе, вызванном RunAsync. (в приведенном выше примере метод анонимный).
Чтобы выполнить ожидаемый метод внутри анонимного метода выше, украсите анонимный метод внутри RunAsync() с помощью ключевого слова async.
CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
**async**()=>{
// UI code goes here
var response = **await** LongRunningMethodAsync();
});
Ответ 4
Для диспетчера попробуйте это. MSDN
private async Task MyMethod()
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { });
}
Для Thread.Sleep()
попробуйте await Task.Delay(1000)
. MSDN