2010-11-12 4 views
1

Я создаю приложение в Silverlight 4. Первый экран, с которым пользователь вступает в контакт, - это экран входа (Login.xaml). Я написал следующий код в файле Login.xaml.cs.Silverlight 4 Asynchronous Issue

private void btnSubmit_Click(object sender, RoutedEventArgs e) 
{ 
    //first validate if the user is authorised for this application 
    if (this.ValidateEntry()) 
    { 
     if (UserAuthenticationBL.AuthenticateUser(txtUserName.Text.Trim(), txtPassword.Password.Trim())) 
     { 
      //since the user is authenticated we will show the dashboard screen 
      this.Content = new MainPage(); 
     } 
     else 
     { 
      this.ShowErrorMessage("Invalid username or password"); 
      txtUserName.Focus(); 
     } 
    } 
} 

Моя проблема в том, что код выполняется, прежде чем я получу данные в методе AuthenticateUser. Код немедленно сводится к «Недопустимое имя пользователя или пароль», и список загружается после завершения всего выполнения на странице xaml.

Я знаю, что есть что-то происходит не так с thingi Asynchronous ... и я также знаю, что нужно положить событие, чтобы узнать, когда загрузка завершена ........

, но я не знайте, как это сделать !!! может кто-то пожалуйста поместить немного света по этому вопросу ...

спасибо.

+0

Что метод AuthenticateUser делать? Похоже, что он возвращает bool, но если это так, он выполняет синхронную аутентификацию? –

+0

Для вас действительно важно включить код метода AuthenticateUser, в противном случае трудно понять поток выполнения. Этот код (насколько я могу судить), выполненный, когда вы нажимаете кнопку «Отправить», является ли это предположение правильным или является частью проблемы, с которой этот код работает, прежде чем нажать эту кнопку? – Murven

ответ

0

Если я правильно понял, ваш метод AuthenticateUser работает async, не так ли?

Вы должны определить обратный вызов события AuthenticateUserComplete и запустить метод в событии отправки кнопки. В обратном вызове напишите это предложение if/else, после чего он будет вызываться после завершения асинхронного метода.

Только один вопрос, почему вы делаете асинхронно, если ваше поведение должно быть синхронным? (Вы должны получить ответ, прежде чем принимать решение о том, что делать).

Это http://msdn.microsoft.com/en-us/library/aa719598%28VS.71%29.aspx может быть полезно :)

Оскар

+0

Все запросы Silverlight (сервер) являются Async. – Ben

+0

Конечно, извините! пропустил часть «серебристого света»;) – JSBach