我在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事件处理程序中尝试无效,甚至在我得到结果时也在行中。
答案 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
}
}
} ```
请注意,async
和await
的一个附带好处是,它们允许您在逻辑上编写代码,包括在async
和{之前的异常处理代码{1}}很难做对!