Do tego doszedłem nawet wcześniej sam. Jednak pojawił się problem z którym nie potrafiłem sobie poradzić.
Mój kod metody wygląda tak:
Kopiuj
public string getLinks()
{
WebRequest.DefaultWebProxy = null;
var download = new WebClient();
Uri uri = new Uri(url);
download.Encoding = Encoding.UTF8;
download.DownloadStringCompleted += (sender, args) =>
{
if (args.Cancelled)
zrodlo = "Canceled";
else if (args.Error != null)
zrodlo = "Blad: " + args.Error.Message;
else
{
zrodlo = args.Result;
}
};
download.DownloadStringAsync(uri);
return zrodlo;
}
Zmienna "zrodlo" jest zmienną publiczną klasy "obraz".
No i teraz odwołując się do klasy "obraz" kodem:
Kopiuj
obraz obrazek = new obraz();
obrazek.url = "http://www.adres.pl";
string zrodlo = obrazek.getLinks();
zmienna zrodlo jest pusta. Próbowałem wrzucić returna w metodzie getLinks po drugim else (zamiast zrodlo = args.Result dać return args.Result) ale wtedy pojawiają się błędy:
Error 1 Since 'System.Net.DownloadStringCompletedEventHandler' returns void, a return keyword must not be followed by an object expression
oraz
Error 2 Cannot convert lambda expression to delegate type 'System.Net.DownloadStringCompletedEventHandler' because some of the return types in the block are not implicitly convertible to the delegate return type
Jak sobie z tym poradzić? Jak sprawić, żeby metoda zwróciła wynik dopiero po pobraniu źródła? Z góry dziękuję za pomoc.
Pozdrawiam