我的代码在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