我的Xamarin便携式项目中的代码存在问题。我的布尔标志在事件处理程序方法之前执行但我不想这样做。
static Client.cs (应该只与Web服务连接的类)
public static bool IsConnected;
private static string _username;
private static string _password;
private static void Login()
{
// all login procedures
Connection.ServiceUserAuthorisationCompleted += UserAuthorisationCompleted;
Connection.ServiceUserAuthorisationAsync(_login, _password);
}
private static void UserAuthorisationCompleted(object sender, ServiceUserAuthorisationCompletedEventArgs e)
{
IsConnected = e.Result.status.Equals("1");
}
public static Task LoginAsync(string username, string password)
{
_username = username;
_password = password;
var task = new Task(Login);
task.Start();
return task;
}
和app中的登录页面:
private async void SignInClicked(object sender, EventArgs e)
{
var login = Login.Text;
var password = Password.Text;
await Client.LoginAsync(login, password);
if (Client.IsConnected)
{
MyCredentials.SaveCredentials(login, password);
}
}
IsConnected
类中的标志Client
未在我的if
语句之前初始化,因此事件处理程序始终在我想要的地方执行。
答案 0 :(得分:0)
你应该等待授权调用,这样在你的授权发生后调用LoginAsync的方法会更进一步,并且那时应该更新IsConnected。
public static async Task LoginAsync(string username, string password)
{
_username = username;
_password = password;
Connection.ServiceUserAuthorisationCompleted += UserAuthorisationCompleted;
await Connection.ServiceUserAuthorisationAsync(_login, _password);
}