2012-09-11 89 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'來阻止主線程,但這太糟糕了,我甚至不打算提供一個示例,因爲這是一個完全錯誤的方法。畢竟,如果你想看到這個解決方案,請給我打電話。 –