Ich habe ein Problem mit meinem Code in einem Xamarin tragbaren Projekt. Mein boolesches Flag wird vor der Event-Handler-Methode ausgeführt, aber das möchte ich nicht.Code nach Ereignishandler
statische Client.cs (Klasse, die nur mit Web-Service verbinden soll)
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;
}
und meine Login-Seite in 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);
}
}
Flagge IsConnected
in Client
Klasse nicht initialisiert vor meiner if
Anweisung, also der Event-Handler führt immer nach, wo ich will.
Sie müssen hier eine Brücke zwischen Event-based Async Pattern und Taskbased Async Pattern bauen. Siehe https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/interop-with-other-asynchronous-patterns-and-types#EAP – Fildor
dank @Fildor Ihre Antwort war sehr hilfreich – vamteusz