2013-11-25 2 views
0

다음 코드는 웹 서비스에서 데이터를 성공적으로 가져 와서 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

관련 문제