Próbuję pobrać ciąg z dowolnej strony w mojej przenośnej bibliotece klas. Utworzyłem najbardziej podstawową konfigurację:Pobierz ciąg z adresu URL przy użyciu przenośnej biblioteki klas (PCL)
- stworzył nowy projekt PCL
- zgodną z WP8 i WinRT jak również obowiązkowe składniki, takie jak Silverlight
Jak WebClient nie jest kompatybilny z tymi systemami, nie można używać:
string data = new WebClient().DownloadString();
Próbowałem za pomocą tego jak dobrze (używa this):
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = HttpMethod.Get;
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
string data = ""
using (var sr = new StreamReader(response.GetResponseStream()))
{
data = sr.ReadToEnd();
}
Jednak, kiedy wywołać drugi zestaw kodu z zewnętrznej aplikacji C# odwołującego PCL, debugger po prostu nie bez ostrzeżenia lub błędu wiadomość na:
request.GetResponseAsync();
Czy istnieje prosty sposób na pobranie napisu, którego mi brakuje?
* także, dlaczego debugger po prostu wyjdzie bez wyjaśnienia?
Edit:
Oto kolejny sposób próbowałem - na podstawie odpowiedzi już dostarczonych. Ponownie, ta metoda kończy działanie i wymusza zamknięcie debuggera.
Metoda PCL:
public static async Task<string> DownloadString()
{
var url = "http://google.com";
var client = new HttpClient();
var data = await client.GetStringAsync(url);
return data;
}
Wywołanie metody:
private static async void Method()
{
string data = await PCLProject.Class1.DownloadString();
return data;
}
Czy działa to w aplikacja komputerowa, aplikacja Windows Store, aplikacja WP8, lub co, gdy zobaczysz to zachowanie? Czy na pewno oczekujesz lub oczekujesz na wszystkie zadania? (W przeciwnym razie program może po prostu się zakończyć i zakończyć, zanim skończy się pobieranie.) Jeśli korzystasz z Windows Phone, robisz wszystko, co blokowałoby wątek UI po zakończeniu pobierania (np. Poprzez Task.Wait lub Zadanie. Wynik)? –