c# - Async Task<> 函数的 Result 只是阻止程序运行
问题描述
所以,我试图从 Firebase 上的 User 表中获取我的数据,然后在我返回并尝试将结果设置为 Label 后,屏幕会变成全白(如果重要的话,我正在使用 xamarin for android)并且什么也没有发生。也许我做错了什么或者我错过了什么,我对任务的工作方式也有点模糊。我有人有任何想法,请随意给我任何指示或任何其他选择。这是我使用的代码。谢谢
UserDetailsRetrive.cs
public async Task<UserDetails> getUserInfoDetails()
{
FirebaseClient client = new FirebaseClient("https://xyz.firebaseio.com/");
return (UserDetails)(await client.Child("user").OnceAsync<UserDetails>()).Select(item => new UserDetails
{
first_name = item.Object.first_name,
last_name = item.Object.last_name,
username = item.Object.username,
birthdate = item.Object.birthdate,
newsletter = item.Object.newsletter,
term_condition = item.Object.term_condition
});
配置文件.cs
public void setUserInfo()
{
UserDetailsRetreive usr = new UserDetailsRetreive();
UserDetails userDetails = usr.getUserInfoDetails().Result;
username.Text = userDetails.username.ToString();
}
用户详细信息.cs
class UserDetails
{
public string first_name { get; set; }
public string last_name { get; set; }
public string username { get; set; }
public string birthdate { get; set; }
public bool newsletter { get; set; }
public bool term_condition { get; set; }
}
解决方案
Task.Result
会阻塞直到Task
完成,这就是您遇到 UI 冻结的原因。为了解决这个问题,您需要usr.getUserInfoDetails
异步调用
public async Task setUserInfo()
{
UserDetailsRetreive usr = new UserDetailsRetreive();
UserDetails userDetails = await usr.getUserInfoDetails();
username.Text = userDetails.username.ToString();
}
推荐阅读
- c++ - 派生对象的基类引用 - 策略模式
- python - Discord python bot:如何使用会员的最高角色颜色制作嵌入消息?
- angular - Angular JHipster 项目中的自定义日期选择器选项
- css - 从屏幕中间到左角的动画徽标
- windows - 致命错误:未捕获错误:升级到 5.5 时调用未定义函数 wp_unregister_GLOBALS()
- mysql - 官方文档网站上的 MySQL 轴顺序无效
- javascript - Node.js 响应 API 与 Express.js 响应 API
- r - 为什么我用 R 抓取 Twitter 数据,收集到的推文不是完整的句子?
- docker - 如何阅读牧场主的秘密?
- python - 使用 selenium python 进行网页抓取