MasterCodeon Ответов: 1

C# как использовать WebClient.Метод DownloadStringAsync?


Привет всем!
я имплементировал C# Получить Только Certian Текст С Вики-Страницы?[^] чтобы загрузить весь текст из Вики-поиска( я использую для этого Вики-api), теперь проблема заключается в том, что я использовал метод DownloadString, и когда он вызывается, поток пользовательского интерфейса зависает до тех пор, пока строка не будет загружена(и если сеть медленная, она будет сидеть там некоторое время). Поэтому чтобы решить эту проблему мне нужно использовать метод DownloadStringAsync но я не могу понять как его использовать
вот исходный код, который я сейчас использую:
public void WikiSearchEngine(string SearchInput)
{
    //Download The Search Page
    var webClient = new WebClient();
    string pageSourceCode = webClient.DownloadString("http://en.wikipedia.org/w/api.php?action=opensearch&search=" + SearchInput);
}

вот что я придумал для того, чтобы попытаться использовать асинхронную версию этого метода:
public void WikiSearchEngine2(string SearchInput)
{
    //Download The Search Page
    var webClient = new WebClient();
    string StringToConvert = "http://en.wikipedia.org/w/api.php?action=opensearch&search=" + SearchInput;
    Uri StringToUri = new Uri(StringToConvert);
    string pageSourceCode = webClient.DownloadStringAsync(StringToUri);
}

теперь проблема в том, что VS выдает мне ошибку: не удается неявно преобразовать тип 'void' в 'string'
так что же я делаю не так?
я уже смотрел ссылку на этот метод, и это не очень помогло.
заранее благодарю вас за вашу помощь,
Мастеркодеон

1 Ответов

Рейтинг:
8

DamithSL

использовать DownloadStringCompleted [^]событие, как показано ниже

var client = new WebClient();
client.DownloadStringCompleted += (sender, e) =>
{
   string pageSourceCode = e.Result;
   //do something with results 
};

client.DownloadStringAsync(StringToUri);


MasterCodeon

это прекрасно работает, спасибо.
я так думаю, что ошибка возникла из-за того, что я пытался поместить содержимое на то, что возвращает значение метода DownloadStringAsync(которое, по-моему, пусто) в строку, верно?
большое вам спасибо!

DamithSL

да, правильно

MasterCodeon

ах, теперь я понимаю.
спасибо.