Windows phone 8 适用于windows phone 8.1的新API

Windows phone 8 适用于windows phone 8.1的新API,windows-phone-8,windows-phone-8.1,Windows Phone 8,Windows Phone 8.1,我试图在WindowsPhone8.1中使用这两种方法(wp8),但它会出现错误并且无法编译,很可能是因为它们被删除了。我尝试搜索新的API,但没有找到。还有什么其他的选择呢 Dispatcher.BeginInvoke(()=>{}) System.Threading.Thread.Sleep()调度程序.BeginInvoke(()=>{})替换为 await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.No

我试图在WindowsPhone8.1中使用这两种方法(wp8),但它会出现错误并且无法编译,很可能是因为它们被删除了。我尝试搜索新的API,但没有找到。还有什么其他的选择呢


Dispatcher.BeginInvoke(()=>{})


System.Threading.Thread.Sleep()

调度程序.BeginInvoke(()=>{})替换为

await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => {});
System.Threading.Thread.Sleep()替换为

await Task.Delay(TimeSpan.FromSeconds(doubleValue));

它们仍然适用于Windows Phone 8.1 SIlverlight应用程序,但不适用于Windows Phone应用商店应用程序。Windows应用商店应用的替代品是:

睡眠(见):

wait System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(30));
调度员(请参阅):

CoreDispatcher dispatcher=CoreWindow.GetForCurrentThread().dispatcher;
wait dispatcher.RunAsync(corespatcherpriority.Normal,()=>{});

对于Dispatcher,请尝试此操作


对于
Thread.Sleep()
尝试
等待任务。延迟(1000)

请注意,不仅API发生了变化(采用了WindowsStore应用程序中的API),而且在windowsPhone 8.0中获取Dispatcher的方式也发生了变化

@约翰·福克的建议虽然有效,但在多种情况下可能会返回无效

旧的获取调度程序的代码:

var dispatcher = Deployment.Current.Dispatcher;
or
Deployment.Current.Dispatcher.BeginInvoke(()=>{
     // any code to modify UI or UI bound elements goes here 
});

Windows 8.1中新增的部署不是可用的对象或命名空间

为了确保获得主UI线程调度程序,请使用以下命令:

var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
or 
CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync(
  CoreDispatcherPriority.Normal,
  ()=>{
      // UI code goes here
});
此外,尽管该方法表示它将异步执行,但在RunAsync调用的方法中不能使用关键字await。(在上面的示例中,方法是匿名的)

为了在上面的匿名方法中执行等待的方法,请使用async关键字修饰RunAsync()中的匿名方法

CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
**async**()=>{
      // UI code goes here
      var response = **await** LongRunningMethodAsync();
});

自从这篇文章以来,一切又变了吗?还是我遗漏了什么?您放置await会导致语法错误,当我将“await”从Dispatcher之前移动到匿名方法之前时,我自己的代码也是如此。private async void PlayLaser(){DIspatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,wait()=>{laser.Play();}}(我试图完全不等待,但我的音频有时太延迟了。)请更具体地说,自发布以来,Windows 8.1没有改变。对于Windows 10,这可能不是合适的线程,因为它标记为WindowsPhone 8.1。为了统一操作系统,WindowsPhone 10上的许多API已经完全改变。我在Windows 10上,但正在用VS2015为8.1和Phone 8.1构建一个通用应用程序。它不是Win10 Universal。请重新阅读我的示例的最后一个代码块以及上面的注释。您的“麻烦代码”将在*async应该在的位置等待,而不是等待laser.play()以同步方式调用。这是因为您将wait放在匿名方法前面,这是不可能的。这应该会有帮助:-私有异步void PlayLaser(){Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,async()=>{await laser.Play();});}Doh!但是Play()是不可期待的。我以为我是在用Dispatcher.RunAsync()异步运行Play(),不是吗?此外,在异步方法中,我仍然收到关于未在Dispatcher.RunAsync()之前等待的警告。哦,好吧,我想我有一些书要读。
CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
**async**()=>{
      // UI code goes here
      var response = **await** LongRunningMethodAsync();
});