XamarinAndroid开发:从任务中获取结果

XamarinAndroid开发:从任务中获取结果,android,xamarin.android,task,Android,Xamarin.android,Task,我正在用Xamarin开发一个Android应用程序。我有一个静态类NetworkServices,它公开了一些调用webservices的方法。 其中之一是查询服务器状态: public static async Task<SystemInfo> TestConnection(HomeServerInfo hsi) { HttpClient openRequest = new HttpClient(); HttpRes

我正在用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());
        }
公共静态异步任务TestConnection(HomeServerInfo hsi)
{
HttpClient openRequest=新的HttpClient();
HttpResponseMessage hrm=wait openRequest.GetAsync(new System.Uri(hsi.ToString()+“/HomeServices/ServerController”);
返回新的系统信息(hrm.ToString());
}
从OnCreate调用此方法:

// Query server status
            Task<SystemInfo> si = NetworkServices.TestConnection(hsi);
            serverStatus.SetText(si.Result.CurrentDateTime, TextView.BufferType.Normal);
//查询服务器状态
任务si=NetworkServices.TestConnection(hsi);
SetText(si.Result.CurrentDateTime,TextView.BufferType.Normal);
但这会冻结应用程序。 为什么是错的?查询结果属性不正确?
谢谢

您应该在后台运行任务,并在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();
//查询服务器状态
任务si=NetworkServices.TestConnection(hsi);
si.ContinueWith((结果)=>
{
使用(var h=新处理程序(Looper.MainLooper))
{
h、 Post(()=>serverStatus.SetText(result.CurrentDateTime,TextView.BufferType.Normal));
}
}
si.Start();

谢谢!我有点困惑…TestConnection返回一个Task对象。当我调用Result属性时,我执行的任务?或者UI线程等待完成?你能解释一下吗?确切地说!Task的Result属性的getter相当于等待任务完成。因为你在主线程上执行它(在onCreate()内)在计算结果之前,您将阻止您的应用程序。并且您可以右键访问结果属性,在当前上下文中执行任务。非常感谢您的解释!再见