2013-11-25 87 views
0

以下代碼成功從Web服務獲取數據並將其顯示在Windows 8桌面應用程序中。Try-Catch不顯示帶有等待的消息對話框

HttpClient client = new HttpClient(); 
HttpResponseMessage response = await client.GetAsync("http://localhost:12345/api/items"); 

var info = new List<SampleDataGroup>(); 

if (response.IsSuccessStatusCode) 
{ 
    var content = await response.Content.ReadAsStringAsync(); 

    var item = JsonConvert.DeserializeObject<dynamic>(content); 

    foreach (var data in item) 
    { 
     var infoSect = new SampleDataGroup 
     (
      (string)data.Id.ToString(), 
      (string)data.Name, 
      (string)"", 
      (string)data.PhotoUrl, 
      (string)data.Description 
     ); 
     info.Add(infoSect); 
    } 
} 
else 
{ 
    MessageDialog dlg = new MessageDialog("Error"); 
    await dlg.ShowAsync(); 
} 

但是,這確實需要互聯網連接才能正常工作。每次沒有互聯網連接時,該應用程序崩潰。

如何在此代碼中編寫try catch語句以在網絡連接不起作用時顯示彈出消息?

編輯:

我想下面使用MessageDialog,而這種停止應用程序崩潰,但它並不帶來了該消息。

 catch (Exception ex) 
     { 
      MessageDialog err = new MessageDialog(ex.Message); 

     } 
+1

你試過了嗎?乍一看,在try/catch中包裝整個代碼應該可以正常工作... – nvoigt

+0

請參閱上面的編輯,我試過了,但它沒有顯示消息,但它確實停止了崩潰。 – Tester

回答

0

你不需要

string errorMessage = string.Empty; 

try 
{ 

    HttpClient client = new HttpClient(); 
    HttpResponseMessage response = await  
    client.GetAsync("http://localhost:12345/api/items"); 

    var info = new List<SampleDataGroup>(); 

    if (response.IsSuccessStatusCode) 
    { 
    var content = await response.Content.ReadAsStringAsync(); 

    var item = JsonConvert.DeserializeObject<dynamic>(content); 

    foreach (var data in item) 
    { 
     var infoSect = new SampleDataGroup 
     (
      (string)data.Id.ToString(), 
      (string)data.Name, 
      (string)"", 
      (string)data.PhotoUrl, 
      (string)data.Description 
     ); 
     info.Add(infoSect); 
    } 
    } 
    else 
    { 
     errorMessage = "Error"; 
    }  
}  
catch (Exception ex) 
{ 
    ErrorMessage = ex.Message; 
} 

if (errorMessage != string.Empty) 
{ 
    MessageDialog dlg = new MessageDialog(errorMessage); 
    await dlg.ShowAsync(); 
} 

+0

它的工作原理,但我得到的代碼警告「因爲這個電話沒有等待,執行當前的方法繼續呼叫之前完成考慮應用await運算符的調用結果」 – Tester

+0

但是,當我包括等待'await err.ShowAsync();'我得到一個錯誤「不能在catch子句的正文中等待」 – Tester

+0

解決方案已更新。 – SilverlightFox