C#Await Call根据调用它的函数抛出异常

时间:2014-07-01 11:35:39

标签: c# httpwebrequest async-await windows-phone-8.1

我正在为Windows Phone构建一个应用程序,它向服务器发出请求并检索一些JSON文本并将信息显示给用户。

我允许用户手动输入搜索字符串,或让他们使用ZXing.NET库从QR码扫描它。

我需要XAML页面,一个用于文本输入,另一个用于扫描QR码。一旦我有了搜索字符串,我就会导航到我的显示页面,在那里我尝试从网站上读取信息。从文本条目XAML页面它工作得很好,从QR码XAML页面我得到了类型例外的第一次机会例外。

以下是我从文本条目中调用显示页面的方法:

this.Frame.Navigate(typeof(PartDisplayPage), cleanedString);

在二维码页面上,我实际上已经注释掉了二维码阅读器,只需将它放在一个AppBar按钮中:

 this.Frame.Navigate(typeof(PartDisplayPage), "144-2227");

PartDisplayPage OnNavigatedTo函数中,我有以下内容

this.navigationHelper.OnNavigatedTo(e);
pInfo = new PartInfoJSON(e.Parameter as string);
await progressbar.ShowAsync();
await pInfo.getPartInfo();
await progressbar.HideAsync();

程序进入pInfo.getPartInfo()函数,看起来像这个

//create url
string serviceURL = ...;

try
{
    var resp = await MakeAsyncRequest(serviceUrl, "");
    ProductInfo t = JsonConvert.DeserializeObject<ProductInfo>(resp);
}
catch(Exception e)
{
  //set stuff to Default value strings for checking later
}

我认为我在StackOverFlow上找到的MakeAsync请求看起来像这样

 public static Task<string> MakeAsyncRequest(string url, string contentType)
 {
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
     //request.ContentType = contentType;
     request.Method = "GET";

     Task<WebResponse> task = Task.Factory.FromAsync(
                              request.BeginGetResponse,
                              asyncResult => request.EndGetResponse(asyncResult),
                              (object)null);

      return task.ContinueWith(t => ReadStreamFromResponse(t.Result));
 }

ReadFromStreamResponse:

 private static string ReadStreamFromResponse(WebResponse response)
    {
        using (Stream responseStream = response.GetResponseStream())
        using (StreamReader sr = new StreamReader(responseStream))
        {
            //Need to return this response 
            string strContent = sr.ReadToEnd();
            return strContent;
        }
    }

所以我不知道造成这个问题的原因。如果我使用搜索页面并键入144-2227它可以正常工作,如果我将测试硬编码到ScanPage中它会抛出一个异常,它不会被我的try catch块捕获。如果有人有任何见解,我会感激不尽。

0 个答案:

没有答案