添加叠加层时背景线程不起作用

时间:2016-02-22 09:59:05

标签: c# ios .net multithreading xamarin

我正在尝试添加加载覆盖,而我的应用程序在后台线程中调用web api服务但由于某种原因它无法正常工作。当我使用以下代码时,它按预期工作:

        Task.Factory.StartNew (

            () => {
                Console.WriteLine ( "Hello from taskA." );
                System.Threading.Thread.Sleep(3000);
            }

        ).ContinueWith ( 
            t => {
                loadingOverlay.Hide();

            }, TaskScheduler.FromCurrentSynchronizationContext()
        );

上面的代码写入控制台,然后按预期睡眠3秒,然后删除叠加层。但是,当我向存储库添加一个调用时,它会跳过整个第一部分并隐藏覆盖。

新代码如下所示:

          Task.Factory.StartNew (

            () => {
                Console.WriteLine ( "Hello from taskA." );
                var user = userRepository.GetUserByEmail(EmailTextBox.Text);
                System.Threading.Thread.Sleep(3000);
            }
            ).ContinueWith ( 
            t => {
                loadingOverlay.Hide();

            }, TaskScheduler.FromCurrentSynchronizationContext()
        );


    };

存储库中的代码如下:

   using (var client = new HttpClient ()) {
   client.BaseAddress = _uri;
   client.DefaultRequestHeaders.Accept.Clear ();
   client.DefaultRequestHeaders.Accept.Add (new MediaTypeWithQualityHeaderValue ("application/json"));
     HttpResponseMessage response = client.GetAsync(String.Format("GetUser?email={0}", email)).Result;
        if (response.IsSuccessStatusCode) {

            var jsonResponse = response.Content.ReadAsStringAsync ().Result;
            return JsonConvert.DeserializeObject<User> (jsonResponse);

        } else {
            return null;
        }
    }

任何帮助将不胜感激 - 提前感谢

1 个答案:

答案 0 :(得分:0)

你可以使用await&amp; amp;异步关键字。

var user = await userRepository.GetUserByEmail(EmailTextBox.Text);
loadingOverlay.Hide();

await关键字只表示您在排除下一个代码行之前等待GetUserByEmail的回答。

您需要对此行执行相同的操作,而不是 .Result

HttpResponseMessage response = await client.GetAsync(String.Format("GetUser?email={0}", email));

不要忘记在您的网络通话方法上添加async关键字。

使用此await关键字,您需要在使用await关键字的方法中添加async。

更多关于async&amp;等待:https://msdn.microsoft.com/en-us/library/hh191443.aspx