Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何处理回调函数 公共用户登录(用户) { 用户响应User=null; parse.Users.Login(“你好”,“99999”,r=> { 如果(r.Success){responseUser=r.Data;} }); 返回应答器; }_C#_Parsing_Callback - Fatal编程技术网

C#如何处理回调函数 公共用户登录(用户) { 用户响应User=null; parse.Users.Login(“你好”,“99999”,r=> { 如果(r.Success){responseUser=r.Data;} }); 返回应答器; }

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<

为什么return responseUser为null,而r.Data不为null?谢谢你

您没有告诉我们parse.Users.Login函数是如何工作的,但它似乎是异步的。这意味着它将立即返回,回调将在很久以后调用。因此,您将从主函数返回null

您需要修改登录函数,使其也能与回调一起工作:

  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);
        }
    });
}