2012-09-11 53 views
0
public User Login(User user) 
    { 
     User responseUser = null; ; 
     parse.Users.Login<User>("hello", "99999", r => 
      { 
       if (r.Success) { responseUser = r.Data; } 
      }); 
     return responseUser; 
    } 

为什么返回responseUser为空但r.Data不为空?谢谢!!!C#如何处理回调函数

回答

1

你还没有告诉我们parse.Users.Login<User>函数是如何工作的,但看起来它是异步的。这意味着它会立即返回并且稍后调用回调。所以你会从主函数返回null。

您需要修改登录功能,使其与回调的作品,以及:

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

登录功能的第三方API,我不能修改它 – user1070827

+0

那么恐怕没有太多你可以做到这一点。你正在调用一个异步方法,你不可能期望立即得到结果。当异步调用正在运行时,通过使用'ManualResetEvent'来阻止主线程,但这太糟糕了,我甚至不打算提供一个示例,因为这是一个完全错误的方法。毕竟,如果你想看到这个解决方案,请给我打电话。 –