2013-02-22 2 views
0

WP7에서 로깅 작업에 문제가 있습니다. LogInButton을 클릭하면 프롬프트에서 값을 가져 오지 않습니다 = 프록시에서 e.Result. 비동기 호출이 끝날 때까지 대기하려면 어떻게해야합니까? 내가 스레드에 관한. 수면하지만 난 그것을 몇 가지 작업이 여전히 실행되고 있는지, WP 7.async가 값을 얻을 때까지 대기 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

+0

하지만 클릭하면 "로그인에 실패했습니다"라는 메시지가 표시되고 잠시 다음 버튼을 눌러 다음 창으로 전달해야합니다. 어쩌면 비동기를 완료하고 결과를 전달하는 방법이 있을까요? – bohunn

+0

'.NET Framework 4.0'을 대상으로 할 수 있다면 Task.WaitAll을 사용하여이 작업을 수행 할 수 있어야합니다. Windows Phone 7.8 SDk가 출시 될 때까지 기다려야 할 수도 있습니다. 이미 릴리스되었습니다 : http://www.microsoft.com/en-us/download/details.aspx?id=36474 –

답변

0

그냥 사용자 정보를 제공한다해야 할 유일한 것은에서 할 수없는 가정합니다.

정말 필요한 경우 (작업 결과는 응용 프로그램에 필요합니다) 사용자가 다른 작업을 수행하는 것을 차단하는 방식으로 수행 할 수 있습니다 (비동기 작업을 시작하기 직전에 표시해야하는 전체 화면 패널과 완료되었습니다.)