Пакет WebClient.DownloadStringAsync в функцию возвращает строку - PullRequest
0 голосов
/ 08 ноября 2011

У меня был метод, загружающий строку, анализирующий ее и затем возвращающий проанализированные данные в виде строки []. Теперь я хочу изменить этот метод, чтобы он использовал DownloadStringAsync, но я не знаю, как по-прежнему использовать его как функцию, возвращающую этот строковый массив.

Поскольку извлеченная строка анализируется в методе DownloadStringAsyncCompleted, а не в методе, из которого она была вызвана: S

Ответы [ 3 ]

2 голосов
/ 08 ноября 2011

Вы не можете плавно преобразовать синхронный код в асинхронный.В вашем примере вы должны вернуть void и принять другой параметр типа Action (callback), который вы должны вызвать в DownloadStringAsyncCompleted, чтобы сигнализировать, что данные пришли.

C # 5 поможет с этим, но все же асинхронноявляется асинхронным.

0 голосов
/ 08 ноября 2011

Вы должны изменить свой метод, чтобы инициировать начало загрузки Async через DownloadStringAsync().Затем переместите код, который его анализирует и возвращает string[] в метод, который обрабатывает событие DownloadStringAsyncCompleted.

0 голосов
/ 08 ноября 2011

try WebClient.DownloadString это не асинхронно.

WebClient client = new WebClient ();
string reply = client.DownloadString (address);
Console.WriteLine (reply);

Если вы хотите использовать метод DownloadStringAsync, вам нужно подождать, пока не произойдет событие DownloadStringAsyncCompleted.опять это будет метод синхронизации.если вы действительно хотите, чтобы результат продолжался, используйте метод синхронизации.

...