事件处理程序后执行代码

时间:2017-08-30 14:20:30

标签: c# xamarin.forms

我的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语句之前初始化,因此事件处理程序始终在我想要的地方执行。

1 个答案:

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