2010-11-12 57 views
1

我正在Silverlight 4中创建一个应用程序。用户接触到的第一个屏幕是登录屏幕(Login.xaml)。我在Login.xaml.cs文件中编写了下面的代码。Silverlight 4异步问题

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页面上的所有执行完成后加载列表。

我知道有一些与异步一句话是走错了......我也知道我需要把一个事件,知道什么时候加载完成........

,但我不知道如何去做! 有人可以请在这个问题上发表一些看法...

谢谢。

+0

什么是authenticateUser方法在做什么?它看起来像它正在返回一个布尔,但如果是这样的话,它是同步进行身份验证? – 2010-11-12 13:50:29

+0

包含AuthenticateUser方法的代码对您来说非常重要,否则很难理解执行流程。当你点击一个“提交”按钮时,这个代码是(据我所知)执行的,这个假设是否正确,或者在你点击那个按钮之前,这个代码正在运行的问题的一部分? – Murven 2010-11-12 15:54:06

回答

0

如果我理解正确,您的AuthenticateUser方法正在运行异步,对吧?

您必须定义对AuthenticateUserComplete事件的回调并在按钮提交事件中运行该方法。在回调函数中写入if/else子句,然后在异步方法完成后调用它。

只是一个问题,如果你的行为应该是同步的,你为什么会异步执行? (在决定做什么之前,你必须得到答案)。

http://msdn.microsoft.com/en-us/library/aa719598%28VS.71%29.aspx 可能会有所帮助:)

奥斯卡

+0

所有Silverlight(服务器)请求都是异步的。 – Ben 2010-11-12 14:02:32

+0

当然可以,对不起!错过了“银光”部分;) – JSBach 2010-11-12 14:11:26