0

我在 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 事件处理程序中尝试无济于事,甚至在我得到结果时也在排队。

4

1 回答 1

1

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

但是,方法名称...Async上的后缀LoginAsync表示此 API 返回 a Task<T>,这意味着此 API 是为 C# 5 的 newasyncawait关键字而构建的。

因此,我建议将您的代码更改为如下所示: ``` 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请注意, and的附带好处之一await是它们允许您以逻辑方式编写代码,包括您的异常处理代码,这些代码在之前async并且await很难正确处理!

于 2013-04-22T18:18:37.943 回答