По запросу веб выполняется асинхронно не существует простой способ, чтобы этот метод блока и возвращать только когда (если?) Ответ получен. (Существует способ сделать это, но рекомендуется для перфекционизма, удобства использования и удобства обслуживания.)
Вместо этого вы должны написать код, который предназначен для запуска асинхронно.
Общий шаблон для вашей ситуации - указать метод обратного вызова, который принимает действие в качестве конечного параметра.
Самый простой способ реализовать действие - принять единственный параметр, являющийся объектом webresponse. Чтобы помочь повторному использованию кода и разделению проблем, вы, вероятно, захотите перейти к тому, чтобы действие получило кортеж Исключения или необработанное (или возможно отформатированное) ответное содержимое.
Вы хотите написать свой метод что-то вроде:
private string request(string json,
string url,
Action<Exception, string> callback)
{
WebClient client = new WebClient();
client.DownloadStringCompleted += (s, e) =>
{
// add better error handling than this!!!
try
{
callback(e.Error, e.Result);
}
catch (Exception exc)
{
callback(exc, null);
}
};
client.DownloadStringAsync(new Uri(url);
}
Alternativey, вы могли бы использовать асинхронную CTP http://msdn.microsoft.com/en-us/vstudio/gg316360
является то, что лучше? и, пожалуйста, не нужно грубить. – Nathan
нет, это не лучше. И я не груб. Я просто пытаюсь помочь. –
, тогда, пожалуйста, не беспокойтесь, отвечая на этот вопрос, если вы думаете, что это не грубо. Обычно, если кто-то попросил меня о помощи, я, конечно, не ответил бы этим отношением. – Nathan