Ваш подход - обратная логика.Вы знаете, что вы можете иметь возвращаемые значения для методов, верно? -)
Что вам нужно сделать, это позволить вашему ParseXmlString
методу принять responseString
в качестве параметра и позволить ему вернуть созданное IEnumerable
вот так:
private IEnumerable<SearchResult> ParseXmlString(responseString)
{
XDocument xdoc = XDocument.Load(responseString);
var data =
from query in xdoc.Descendants("tracks").Elements("item")
select new SearchResult
{
Artist = (string)query.Element("artist"),
Album = (string)query.Element("album"),
Track = (string)query.Element("track"),
};
return
from query in xdoc.Descendants("artists").Elements("item")
select new SearchResult
{
ArtistA = (string)query.Element("artist"),
};
}
И измените обработку асинхронного кода, чтобы выполнить обратный вызов в ваш поток пользовательского интерфейса, когда он завершит чтение responseString.Затем в потоке пользовательского интерфейса вы должны сделать:
// This being your method to get the async response
GetResponseAsync(..., responseString =>
{
var searchResults = ParseXmlString(responseString);
listBox2.ItemsSource = searchResults;
})
Вы можете увидеть этот ответ, если вам нужно некоторое базовое понимание обратных вызовов: Обратные вызовы в C #