可能有一些明顯的錯誤,但我正在做一些沒有經驗的東西。我試圖從互聯網上獲得一個字符串,但它不工作。在WinRT中,我們在異步方法使用HttpClient的,我做到了,如下所示: -卡在異步方法
private async void update()
{
try
{
rawdata = await client.GetStringAsync(url);
}
catch
{
rawdata = "Updation failed. Error code:vish42042";
}
}
現在,這裏是代碼是如何調用: -
string temp = @url;
update();
WAIT:
if (rawdata == null) {
goto WAIT;
}
RAWDATA是一個全球性的varible,我做了這個檢查轉到WAIT:看看代碼失敗的地方,以及它在這裏失敗。我期待着當rawdata從互聯網更新時,if循環會中斷,但它永遠不會發生。我做錯了什麼?(顯然我不是以我所知道的最好的方式去做,但它也錯了嗎?)。哪裏有問題?
更新:其實問題不是如何使這個功能工作,它正在進行修改或兩個。真正的問題是如何確保一旦update()函數被調用後更新rawdata,因爲此後的代碼期望它不爲空,而是更新。
一些很好的解釋和答覆後,我想,那麼這就是問題是可以解決的問題: -
string xmlstring = xmlupobj.getUpdatedData();
// Above is the ultimate point of return of data.
//Next code line is this, which throws a null exception
XDocument xmldoc = XDocument.Parse(xmlstring);
所以我覺得做getUpdatedData()異步,返回任務,如果我們可以轉換後任務以適當的字符串的情況下,它已被下載和null如果尚未下載的話,我們可以檢查使用的代碼一些不好的線路爲: -
string xmlstring = xmlupobj.getUpdatedData();
WAIT:
if (xmlstring == null)
{
goto WAIT;
}
xmldoc = XDocument.Parse(xmlstring);
所以,如果它是正確的,唯一的遺骸問題是如何設置xmlstring的?
@torrentialcoding我不知道爲什麼你的編輯建議被拒絕,這顯然是有效的。我希望你不要介意我用我的名字推動你的編輯。 – hvd
@ hvd沒問題,無論是誰編輯,恢復它都是正確的做法。 :) –
即使你*可以*做你想做的事(*等待update()完成)你的應用程序將阻止主線程和認證失敗。 –