【问题标题】:Try-Catch doesn't show Message Dialog box with awaitTry-Catch 不显示带有等待的消息对话框
【发布时间】:2013-11-26 01:33:36
【问题描述】:

以下代码成功从 Web 服务获取数据并将其显示在 Windows 8 桌面应用程序中。

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);

        }

【问题讨论】:

  • 你试过了吗?乍一看,将整个代码包装在 try/catch 中应该可以正常工作...
  • 请看上面的编辑,我试过了,但它没有显示消息,但是它会停止崩溃。

标签: c# windows-8 try-catch


【解决方案1】:

你不需要

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();
}

?

【讨论】:

  • 它可以工作,但我在代码上收到警告“因为没有等待此调用,所以在调用完成之前继续执行当前方法。考虑将 await 运算符应用于调用结果”
  • 但是当我包含 await await err.ShowAsync(); 时,我收到一个错误“不能在 catch 子句的主体中等待”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多