我已經成功地將json數據拖入使用visual studio 2015中的控制檯應用程序的字符串中。現在我試圖複製此wpf,但我發現我無法使用.GetResponse()和我必須使用GetResponseAsync()來代替。谷歌搜索了一段時間後,我認爲我明白異步/等待的重點,但我似乎陷入了僵局。所以這裏是我當前的代碼:當使用await時出現死鎖GetResponseAsync()
這是異步方法,它從Web API拉取返回數據並返回一個JSON字符串。或者在這種情況下,Task<String>
。
public async static Task<String> GetTrola(string station)
{
var url = "http://www.trola.si/" + station;
string text;
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Accept = "application/json";
var answer = (HttpWebResponse)(await request.GetResponseAsync());
using (var sr = new StreamReader(answer.GetResponseStream()))
{
text = sr.ReadToEnd();
}
return text;
}
然後我稱之爲一個按鈕單擊事件的功能,像這樣:
string station = textBox.Text.ToString();
string output = GetJson.Trola.GetTrola(station).Result;
var myObject = JsonConvert.DeserializeObject<Result>(output);
但我認爲問題是,尤其在該行的GetData功能:
var answer = (HttpWebResponse)(await request.GetResponseAsync());
我不知道爲什麼會發生這種情況,因爲我在等待await
關鍵字的請求。我錯過了什麼?
那麼我正在嘗試,但我想我誤解/誤解了錯誤。由於我在無效的button_click方法中調用方法.getTrola,因此無法在其中使用await運算符。所以我應該寫一個新的異步方法,並在button_clicked方法中調用它,對吧? – mythic
@mythic使事件處理程序「異步無效」。然後你可以在裏面使用'await'。通常'async'方法應該返回一個'Task',但是在事件處理程序中可以使用'async void'。 –