Windows Phone 8.1的新API

ac-*_*lap 11 windows-phone-8 windows-phone-8.1

我试图在Windows Phone 8.1中使用这两种方法(WP 8),但是它给出了错误而且没有编译,很可能是因为它们被删除了.我尝试搜索新的API,但无法获得任何.这些的其他替代方案是什么?

Dispatcher.BeginInvoke( () => {}); msdn链接

System.Threading.Thread.Sleep(); msdn链接

Joh*_*alk 14

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

睡眠(请参阅.NET for Windows Store中的Thread.Sleep替换):

await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(30));
Run Code Online (Sandbox Code Playgroud)

Dispatcher(请参阅Deployment.Current.Dispatcher.BeginInvoke如何在Windows应用商店中运行?):

CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { });
Run Code Online (Sandbox Code Playgroud)


Chr*_*hao 9

Dispatcher.BeginInvoke( () => {}); 被替换为

await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => {});
Run Code Online (Sandbox Code Playgroud)

并被System.Threading.Thread.Sleep();替换为

await Task.Delay(TimeSpan.FromSeconds(doubleValue));
Run Code Online (Sandbox Code Playgroud)


小智 6

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

@Johan Faulk的建议尽管可行,但在多种条件下可能会返回null.

抓住调度员的代码:

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

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

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

var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
or 
CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync(
  CoreDispatcherPriority.Normal,
  ()=>{
      // UI code goes here
});
Run Code Online (Sandbox Code Playgroud)

另外,虽然方法SAYS将执行Async,但是关键字await不能在RunAsync调用的方法中使用.(在上面的例子中,该方法是匿名的).

为了在上面的匿名方法中执行一个等待的方法,使用async关键字在RunAsync()内部装饰匿名方法.

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