我试图在Windows Phone 8.1中使用这两种方法(WP 8),但它会出错并且无法编译,很可能因为它们被删除了。我尝试搜索新的API,但无法获得任何API。这些的其他替代方案是什么。
Dispatcher.BeginInvoke( () => {});
msdn link
System.Threading.Thread.Sleep();
msdn link
答案 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)