我正在编写一个Metro应用程序,需要大量调用webservice。 有时Web服务有点慢。在下载数据之前,我不想在页面内等待。
但是,我的后退按钮被禁用,直到我的数据被加载。 这是一个大问题。
所以我尝试了:
try
{
await Task.Run(() =>
{
Dispatcher.RunAsync(CoreDispatcherPriority.High,
() => ViewModel.InitAsync(date)).AsTask(_cts.Token);
}, _cts.Token);
}catch(Exception e)
{
Debug.WriteLine("HomePage, LoadState : "+e);
}
请注意;
我使用Task.Run来使用canceltoken。 并且Dispatcher.RunAsync应该允许我不冻结我的UI。 这在页面LoadState中使用。
我该如何解决这个问题?
问候。
更新了(不解决我的问题):
try
{
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
ViewModel.InitAsync(date)).AsTask(_cts.Token);
}catch(Exception e)
{
Debug.WriteLine("HomePage, LoadState : "+e);
}
答案 0 :(得分:0)
你不能只对你的问题抛出Task.Run
和Dispatcher.RunAsync
。你需要了解他们的所作所为。
在您的情况下,您应该能够这样做:
try
{
await ViewModel.InitAsync(date);
}
catch (Exception e)
{
Debug.WriteLine("HomePage, LoadState : " + e);
}