Windows Phone 8.1的新API

时间:2014-05-12 10:54:52

标签: windows-phone-8 windows-phone-8.1

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

Dispatcher.BeginInvoke( () => {}); msdn link

System.Threading.Thread.Sleep(); msdn link

4 个答案:

答案 0 :(得分:14)

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

睡眠(见Thread.Sleep replacement in .NET for Windows Store):

await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(30));

Dispatcher(见How the Deployment.Current.Dispatcher.BeginInvoke work in windows store app?):

CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { });

答案 1 :(得分:9)

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

await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => {});

System.Threading.Thread.Sleep();

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

答案 2 :(得分:6)

请注意,不仅API已更改(从WindowsStore应用程序采用API),而且在WindowsPhone 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 
});

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

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

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

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

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

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

答案 3 :(得分:1)

对于Dispatcher,试试这个。 MSDN

private async Task MyMethod()
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { });
}

Thread.Sleep()尝试await Task.Delay(1000)MSDN