明らかな間違いがあるかもしれませんが、私は経験のないことをしています。インターネットから文字列を取得しようとしていますが、うまくいきません。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 はグローバル変数です。goto WAIT でこのチェックを行いました。コードが失敗した正確な場所と、ここで失敗したことを確認します。生データがインターネットから更新されたときにifループが壊れることを期待していますが、決して起こりません。私は間違った方法でやっていますか?(明らかに、私が知っている最善の方法でやっているわけではありませんが、それも間違っていますか?)。問題はどこだ?
更新: 実際の問題は、この機能を機能させる方法ではなく、1 つまたは 2 つの変更を加えて機能することです。本当の問題は、 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() を非同期にして Task を返した後、ダウンロードされている場合は Task を適切な文字列に変換でき、ダウンロードされていない場合は null に変換できれば、いくつかの悪いコード行を次のように使用して確認できます。
string xmlstring = xmlupobj.getUpdatedData();
WAIT:
if (xmlstring == null)
{
goto WAIT;
}
xmldoc = XDocument.Parse(xmlstring);
それが正しければ、唯一の問題は xmlstring を設定する方法ですか?