Jestem nowy w Xamarin i próbuję zbudować prostą aplikację na Androida z F #. Próbuję wczytać dane z interfejsu API REST z asynchronizacją, a następnie wyświetlić. Rozumiem, że interakcja z interfejsem użytkownika musi odbywać się na MainThread i że istnieje coś podobnego do linii Activity.RunOnUiThread()
. Próbowałem następujące:Xamarin Android F # aktualizacja interfejsu użytkownika w async bloku
let onSearch args =
let search = this.FindViewById<EditText>(Resource_Id.search)
let searchResults = this.FindViewById<TextView>(Resource_Id.searchResults)
button.Text <- search.Text
async {
let! results = recipeSearch.GetRecipes search.Text
searchResults.Text <- results
}
|> Async.Start
button.Click.Add onSearch
Który wyrzuca wyjątek o interakcji z elementami interfejsu użytkownika w innym wątku. I tak:
let result = async {
let! results = recipeSearch.GetRecipes search.Text
return results
}
|> Async.RunSynchronously
searchResults.Text <- result
celowość prowadzenia go asynchroniczny
Dzięki
Spróbuj umieścić 'zrobić! Async.SwitchToContext Application.SynchronizationContext' w twoim async bloku przed aktualizacją 'searchResults.Text'. – ildjarn