2014-02-05 44 views
0

假设代码正确,并发生Web服务超时。系统崩溃,无法显示错误消息

问题:

  1. 系统崩溃和不能显示该错误消息。

如何显示错误信息?所以我可以在出现错误时为用户提供替代方案吗?

 

1) 
I add this Class in the project : 

public class MyClass 
{ 
    public static async Task LogInSuccess() 
    { 
     try 
     { 
      -- calling a web service here 

     } 
     catch (System.Exception _ex) 
     { 
      _strErrorMsg = _ex.InnerException.Message; 
      throw new Exception("LogInSuccess() " + _strErrorMsg); 

     } 
    } 
} 


--- In the MainPage, 
2) 

private async void SetUp() 
    { 

    -- code for doing setUp task-- 

    CallWebSvc(); 

    } 

3) 


private void CallWebSvc() 
{ 
    bool ShowError = false; 
    System.Exception MyException = new Exception(); 

     try 
     { 
      -- calling a web service thru the MyClass 

      System.Threading.Tasks.Task _blnLogInSuccess = MyClass.LogInSuccess(); 
     await _blnLogInSuccess; 

      if (_blnLogInSuccess.IsCompleted) 
      { 
       g_blnLoginStatus = _blnLogInSuccess.Result; 
      } 


     } 
     catch (System.Exception _ex) 
     { 
      ShowError = true; 
      MyException = ex; 

     } 
     if (ShowError) 
     { 
     var MyMessageBox = new Windows.UI.Popups.MessageDialog("Remote Login Error:" + MyException.Message, "Start Login"); 
     await MyMessageBox.ShowAsync(); 
     } 
} 


+0

你在输出视图中什么都没有? – MatDev8

+0

输出视图显示为系统崩溃消息的一部分但不是作为未经系统崩溃的应用的一部分的消息对话框。所以,我想在MessageDialog中显示类文件中的错误消息。 – MilkBottle

回答

0

我假设你CallWebSvc方法是异步无效(如,没有异步你无法执行的await)。如果是这样的话,你需要知道异步无效并不尽相同treatament例外的异步任务。他们没有正确捕捉。如果您将CallWebSvc从async void更改为async Task,则会正确接收异常。

+0

是的,它是我使用的异步无效。我的LoginSuccess()是异步任务,等待用于CallWebSvc中的此LoginSuccess。如果我使用调用WebSvc和调用者的异步任务,setUp()需要使用await for callWebSvc?如果我不使用SetUp()中的等待,当MyClass中遇到错误时,CallWebSvc是否会显示带有MyMessageBox的消息? – MilkBottle

+0

我想如果你使用CallWebSvc作为异步,即使你没有在setUp中使用await,它也会捕获错误并显示它。 –