Metro应用程序,不要冻结UI

时间:2012-11-20 09:52:00

标签: c# microsoft-metro winrt-async

我正在编写一个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);
}

1 个答案:

答案 0 :(得分:0)

你不能只对你的问题抛出Task.RunDispatcher.RunAsync。你需要了解他们的所作所为。

在您的情况下,您应该能够这样做:

try
{
  await ViewModel.InitAsync(date);
}
catch (Exception e)
{
  Debug.WriteLine("HomePage, LoadState : " + e);
}