2013-02-22 57 views
0

我在WP7中的日志记录操作有问题。当我单击LogInButton时,它不会在代理中获得提示= e.Result的值。我可以做些什么等待异步呼叫结束?我虽然关于线程。睡觉,但我想这是不能够在WP 7等待,直到异步获得价值Windows Phone 7

namespace WP7App 
{ 
public partial class MainPage : PhoneApplicationPage 
{ 
    bool prompt; 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 
    // login operation 
    private void Log(string username, string passwd) 
    { 
     Service1Client proxy = new Service1Client(); 
     proxy.LogInCompleted += new 
     EventHandler<LogInCompletedEventArgs>(proxy_LogInCompleted); 
     proxy.LogInAsync(username, passwd); 

    } 
    public void proxy_LogInCompleted(object sender, LogInCompletedEventArgs e) 
    { 
     prompt = e.Result;    
    } 
    //button action 
    void LogInButton_Click(object sender, RoutedEventArgs e) 
    { 
     if (LoginBox.Text == null) { MessageBox.Show("please fill login box"); } 
     if (PasswdBox.Password == null) { MessageBox.Show("enter your password"); } 
     string login = LoginBox.Text; 
     string passwd = PasswdBox.Password;    
     Log(login, passwd); 
     if (prompt == true) 
     { 
      NavigationService.Navigate(new Uri("/Pages/MainLogged.xaml", UriKind.Relative)); 
     } 
     else 
     { 
      MessageBox.Show("logging failed"); 
     } 
    }        
} 

}

+0

异步的重点在于你无法做到这一点。 – SLaks 2013-02-22 19:08:41

+0

但是,当我点击它显示“登录失败”的消息,我必须保持按钮一会儿,将其传递到下一个窗口。也许有一种方法可以完成异步并传递结果? – bohunn 2013-02-22 19:16:02

+0

如果您可以定位'.NET Framework 4.0',则应该可以使用Task.WaitAll完成此操作。您可能不得不等待“Windows Phone 7.8 SDk”发布。它已经发布:http://www.microsoft.com/en-us/download/details.aspx?id=36474 – 2013-02-22 19:55:19

回答

0

你应该做的仅仅是提供用户信息的唯一要做的事情,有些操作仍在运行。

如果您真的需要这样做(操作结果对于应用程序是必需的),可以通过某种方式来阻止用户进行其他操作(例如应在启动异步操作之前显示的全屏面板,它已经完成)。