gpt4 book ai didi

c# - UI 在反序列化 JSON 时被阻塞

转载 作者:行者123 更新时间:2023-11-30 23:13:18 24 4
gpt4 key购买 nike

我正在使用 HttpClient 从网络服务中获取数据并将其存储到 Realm数据库。我的屏幕自动开始获取数据并显示 ActivityIndicator直到数据被加载并存储在数据库中。

现在的问题是,我有很多数据要使用 JsonConvert.DeserializeObject<Response>(content) 反序列化由于数据很大,此语句阻止/卡住了我的 ActivityIndicator在 UI 屏幕上。

如何在后台线程中反序列化对象,使其不阻塞 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);阻塞我的线程

最佳答案

您可以在自己的线程上运行它并等待结果:

Response responseData;
await Task.Run(() =>
{
responseData = JsonConvert.DeserializeObject<Response>(content);
// preform your Realm database add/updates,
// remember you are now on a different thread so get a new Realm Instance
});

回复:Task.Run Method (Action)

Queues the specified work to run on the thread pool and returns a Task object that represents that work.

关于c# - UI 在反序列化 JSON 时被阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43692149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com