2010-11-12 14 views
1

Je crée une application dans Silverlight 4. Le premier écran avec lequel l'utilisateur entre en contact est l'écran de connexion (Login.xaml). J'ai écrit le code suivant dans le fichier Login.xaml.cs.Silverlight 4 Problème asynchrone

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(); 
     } 
    } 
} 

Mon problème est que le code est exécuté avant que j'obtienne les données dans la méthode AuthenticateUser. Le code descend immédiatement au "nom d'utilisateur ou mot de passe invalide" et la liste est chargée après que toute l'exécution sur la page de xaml ait fini.

Je sais qu'il ya quelque chose de mal avec le rienJe Asynchronous ... et je sais aussi que je dois mettre un événement pour savoir quand le chargement a terminé ........

mais je ne savoir comment s'y prendre !!! quelqu'un peut s'il vous plaît mettre un peu de lumière sur cette question ...

merci.

+0

Quelle est la méthode AuthenticateUser font? On dirait qu'il retourne un booléen, mais si c'est le cas, est-ce qu'il fait l'authentification de manière synchrone? –

+0

Il est vraiment important d'inclure le code de la méthode AuthenticateUser, sinon il est difficile de comprendre le déroulement de l'exécution. Ce code est (autant que je sache) exécuté lorsque vous cliquez sur un bouton "Envoyer", cette hypothèse est-elle correcte ou est-ce une partie du problème que ce code est en cours d'exécution avant de cliquer sur ce bouton? – Murven

Répondre

0

Si j'ai bien compris, votre méthode AuthenticateUser fonctionne async, n'est-ce pas?

Vous devez définir un rappel à l'événement AuthenticateUserComplete et exécuter la méthode dans l'événement de soumission de bouton. Dans le callback, écrivez cette clause if/else, puis elle sera appelée une fois la méthode asynchrone terminée. Juste une question, pourquoi faites-vous de manière asynchrone si votre comportement doit être synchrone? (Vous devez obtenir la réponse avant de décider quoi faire).

Cette http://msdn.microsoft.com/en-us/library/aa719598%28VS.71%29.aspx peut être utile :)

Oscar

+0

Toutes les demandes Silverlight (serveur) sont asynchrones. – Ben

+0

Bien sûr, désolé! raté la partie "silverlight";) – JSBach