Witam, piszę aplikacje na androidową w xamarin'ie, aplikacja musi odpytywać WCF'a, w tym celu wykorzystuje bibliotekę pcl żeby zgrać to wszystko z mvvm cross'em, problem w tym że biblioteka pcl wymaga mapowania wcf'a asychronicznie, do tej pory odpytywanie wyglądało tak:
string token = _client.Zaloguj(login, password);
Teraz muszę to robić tak:
string token = "";
_client.ZalogujCompleted += new EventHandler<ZalogujCompletedEventArgs>((s, e) =>
{
token = e.Result;
});
_client.ZalogujAsync(login, password);
Sam zapis co prawda dłuższy ale ok, bez tragedii. Problem tkwi w tym że przez asynchroniczność funkcje odpowiadają dopiero po jakimś czasie, i kontrolki ładują mi się puste, najlepiej byłoby poczekać na wynik a dopiero potem zwracać odpowiedź(to najlepsze wyjście dla całej aplikacji), ewentualnie rozwiązać jakoś problem tego że gdy wywołuje funkcje i przypisuje jej wynik do zmiennej zawsze dostaje nulla(w momencie zwracania wyniku tam jest null, tylko że nawet kiedy już wejdzie do web service'u i web service zwróci wynik to go nie przypisuje). Jakieś rady jak się z tym uporać? Wrzucam jeszcze funkcję i jej wywołanie.
Funkcja:
public async Task<string> Login(string login, string password)
{
string token = "";
_client.ZalogujCompleted += new EventHandler<ZalogujCompletedEventArgs>((s, e) =>
{
token = e.Result;
});
_client.ZalogujAsync(login, password);
return await Task.FromResult(token);
}
Wywołanie:
_login = new MvxCommand(async () =>
{
string token = await serv.Login("login", "haslo");
});
Kiedy nie korzystam z atrybutów async, await, task, itd wszystko działa dokładnie tak samo. Pilna sprawa, pomóżcie dobrzy ludzie.