【发布时间】:2017-04-29 05:33:50
【问题描述】:
我正在使用 HttpClient 从 Web 服务获取数据并将其存储到 Realm 数据库中。我的屏幕会自动开始获取数据并显示ActivityIndicator,直到数据被加载并存储在数据库中。
现在的问题是,我有很多数据要使用 JsonConvert.DeserializeObject<Response>(content) 反序列化,因为数据很大,这个语句会在 UI 屏幕上阻塞/冻结我的 ActivityIndicator。
我怎样才能在后台线程中反序列化对象,这样它就不会阻塞 UI。
这是我的代码
var response = await Service.createService<HttpResponseMessage>("HTTP").sendData(url, jsonData);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
Response responseData = JsonConvert.DeserializeObject<Response>(content);
DB.createDB<EventType>("realm").subscribe();
if (responseData != null)
{
// status is ok
if (responseData.status.ToUpper() == OK)
{
MessagingCenter.Send<IMessage, EventType>(this, DB_EVENT, new EventTypeBuilder().status(true).requestType(url).response(responseData).Build());
}// status is error
else if (responseData.status.ToUpper() == ERROR)
{
MessagingCenter.Send<IMessage, EventType>(this, UI_EVENT, new EventTypeBuilder().status(false).requestType(url).errorMessage(responseData.errorMessage).Build());
}
}
else // when response is null
MessagingCenter.Send<IMessage, EventType>(this, UI_EVENT, new EventTypeBuilder().status(false).requestType(url).errorMessage(ERROR_RESPONSE_NULL).Build());
}
else
{ // when some error occured
response.EnsureSuccessStatusCode();
}
Response responseData = JsonConvert.DeserializeObject<Response>(content); 阻塞了我的线程
【问题讨论】:
标签: c# multithreading xamarin realm