Xamarin Android开发:从Task获得结果

时间:2016-11-20 12:58:07

标签: android xamarin.android task

我正在使用Xamarin开发Android应用程序。我有一个静态类NetworkServices,它公开了一些调用webservices的方法。 其中之一,查询服务器状态:

public static async Task<SystemInfo> TestConnection(HomeServerInfo hsi)
        {
            HttpClient openRequest = new HttpClient();
            HttpResponseMessage hrm = await openRequest.GetAsync(new System.Uri(hsi.ToString() + "/HomeServices/ServerController"));

            return new SystemInfo(hrm.ToString());
        }

从OnCreate调用此方法:

// Query server status
            Task<SystemInfo> si = NetworkServices.TestConnection(hsi);
            serverStatus.SetText(si.Result.CurrentDateTime, TextView.BufferType.Normal);

但这冻结了应用程序。 为什么错了?查询Result属性不正确? 谢谢

1 个答案:

答案 0 :(得分:0)

您应该在后台运行您的任务,并在UI线程上使用UI更新继续它。

// Query server status
Task<SystemInfo> si = NetworkServices.TestConnection(hsi);
si.ContinueWith((result) =>
{
   using(var h = new Handler(Looper.MainLooper))
   {
      h.Post(()=>serverStatus.SetText(result.CurrentDateTime, TextView.BufferType.Normal));
   }
}

si.Start();