Я пытаюсь добавить накладку загрузки, в то время как мое приложение делает вызов веб-службы 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;
}
}
Любая помощь будет оценена - заранее спасибо
Может быть, есть исключение, которое вам не хватает, потому что нигде не вы ждете для выполнения этой задачи, чтобы закончить с помощью 'Task.Wait()' –