C#如何处理回调函数 公共用户登录(用户) { 用户响应User=null; parse.Users.Login(“你好”,“99999”,r=> { 如果(r.Success){responseUser=r.Data;} }); 返回应答器; }
为什么return responseUser为null,而r.Data不为null?谢谢你 您没有告诉我们parse.Users.Login函数是如何工作的,但它似乎是异步的。这意味着它将立即返回,回调将在很久以后调用。因此,您将从主函数返回null 您需要修改登录函数,使其也能与回调一起工作:C#如何处理回调函数 公共用户登录(用户) { 用户响应User=null; parse.Users.Login(“你好”,“99999”,r=> { 如果(r.Success){responseUser=r.Data;} }); 返回应答器; },c#,parsing,callback,C#,Parsing,Callback,为什么return responseUser为null,而r.Data不为null?谢谢你 您没有告诉我们parse.Users.Login函数是如何工作的,但它似乎是异步的。这意味着它将立即返回,回调将在很久以后调用。因此,您将从主函数返回null 您需要修改登录函数,使其也能与回调一起工作: public User Login(User user) { User responseUser = null; ; parse.Users.Login<
public User Login(User user)
{
User responseUser = null; ;
parse.Users.Login<User>("hello", "99999", r =>
{
if (r.Success) { responseUser = r.Data; }
});
return responseUser;
}
公共无效登录(用户,操作)
{
用户响应User=null;
parse.Users.Login(“你好”,“99999”,r=>
{
如果(r.成功)
{
行动(r.数据);
}
其他的
{
动作(空);
}
});
}
登录函数是第三方API,我无法修改它,因此我担心您对此无能为力。您正在调用其中的异步方法,并且不可能期望立即得到结果。在异步调用运行时,使用ManualResetEvent
阻止主线程是一种黑客行为,但这太可怕了,我甚至不想提供一个示例,因为这是一种完全错误的方法。如果你想看到这个解决方案,请告诉我。
public void Login(User user, Action<User> action)
{
User responseUser = null;
parse.Users.Login<User>("hello", "99999", r =>
{
if (r.Success)
{
action(r.Data);
}
else
{
action(null);
}
});
}