Windows Phone,Web服务和捕获异常

时间:2013-04-22 17:49:11

标签: c# windows-phone

我在Windows Phone中有以下代码:

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 个答案:

答案 0 :(得分:1)

目前尚不清楚Service1SoapClient所基于的类型,因此以下陈述可能不准确。您似乎没有使用移动服务客户端,因为您传递了用户名和密码并返回其他状态。

但是,...Async方法名称上的LoginAsync后缀表示此API返回Task<T>,这表示此API构建为由新async使用和C#5的await个关键字。

因此,我建议您更改代码,内容如下: ``` public partial class MainPage:PhoneApplicationPage {     公共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
    }
}

} ```

请注意,asyncawait的一个附带好处是,它们允许您在逻辑上编写代码,包括在async和{之前的异常处理代码{1}}很难做对!