我的代碼在Xamarin便攜式項目中出現問題。我的布爾標誌是在事件處理方法之前執行的,但我不想要。在事件處理程序後執行代碼
靜態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;
}
和我的登錄頁面:
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
語句之前,所以事件處理程序總是在我想要的地方執行。
您需要在此處構建基於事件的異步模式和Taskbased異步模式之間的橋樑。請參閱https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/interop-with-other-asynchronous-patterns-and-types#EAP – Fildor
謝謝@Fildor 您的回覆非常有幫助 – vamteusz