2013-04-22 64 views
0

我在Windows Phone的下面的代碼:的Windows Phone,Web服務和捕獲異常

public partial class MainPage : PhoneApplicationPage 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    private void Button_LogIn_Click(object sender, RoutedEventArgs e) 
    { 
     Service1SoapClient web_service = new Service1SoapClient(); 
     web_service.LogInAsync(TextBox_Username.Text, TextBox_Password.Password); 
     web_service.LogInCompleted += new EventHandler<LogInCompletedEventArgs>(login_complete); 
    } 

    private void login_complete(object obj, ClientWebService.LogInCompletedEventArgs e) 
    { 
     string answer = e.Result.ToString(); 

     if (answer.Equals("Success") || answer.Equals("success")) 
     { 
      NavigationService.Navigate(new Uri("/Authenticated.xaml", UriKind.Relative)); 
     } 

     else 
     { 
      MessageBox.Show("The log-in details are invalid!"); 
     } 
    } 
} 

的代碼使用Web服務,以登錄用戶進入系統。登錄系統的工作原理應該如此。

我的問題是,我應該在哪裏插入try catch語句以便在Web服務未運行時捕獲異常?我試着在button_click事件處理程序中無濟於事,甚至在我得到結果的時候也行。

回答

1

目前尚不清楚您的Service1SoapClient基於哪種類型,因此以下聲明可能不準確。由於您傳遞了用戶名和密碼並返回了其他一些狀態,因此您似乎沒有使用移動服務客戶端。

然而,...Async後綴上LoginAsync方法名稱表示此API返回一個Task<T>這意味着該API是建立在通過的C#5

因此新asyncawait關鍵字中使用,我建議改變你的代碼如下: ``` public partial class MainPage:PhoneApplicationPage { public MainPage() { InitializeComponent(); }

private async void Button_LogIn_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     Service1SoapClient web_service = new Service1SoapClient(); 
     string answer = await web_service.LogInAsync(TextBox_Username.Text, TextBox_Password.Password); 

     if (answer.ToLower().Equals("success")) 
     { 
      NavigationService.Navigate(new Uri("/Authenticated.xaml", UriKind.Relative)); 
     } 
     else 
     { 
      MessageBox.Show("The log-in details are invalid!"); 
     } 
    catch (<ExceptionType> e) 
    { 
     // ... handle exception here 
    } 
} 

} ```

注意的async側好處之一,await是,它們允許你邏輯地寫你的代碼,包括你的異常處理代碼之前, asyncawait很難找到正確的!

+0

我試過你的建議,但是我的IDE沒有識別異步並等待。我正在使用Visual Studio 2010. – Matthew 2013-04-22 18:40:40

+0

@Matthew:您的項目目標是什麼版本的.NET Framework? – 2013-04-22 20:46:04

+0

該Web服務的目標版本爲3.5。另一方面,該移動應用的目標版本爲4.0 – Matthew 2013-04-23 06:56:42