Windows phone 8 适用于windows phone 8.1的新API
我试图在WindowsPhone8.1中使用这两种方法(wp8),但它会出现错误并且无法编译,很可能是因为它们被删除了。我尝试搜索新的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
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();
});