Sono nuovo di Xamarin e sto provando a creare una semplice app per Android con F #. Sto cercando di caricare i dati da un'API REST con async e quindi visualizzarli. Capisco che l'interazione con l'interfaccia utente debba essere eseguita sul MainThread e che ci sia qualcosa sulla falsariga di Activity.RunOnUiThread()
. Ho provato quanto segue:Xamarin Android F # update UI nel blocco asincrono
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
che genera l'eccezione di interagire con gli elementi dell'interfaccia utente in un altro thread. E questo:
let result = async {
let! results = recipeSearch.GetRecipes search.Text
return results
}
|> Async.RunSynchronously
searchResults.Text <- result
sconfigge lo scopo di farlo Async
Grazie
Prova a mettere 'fare! Async.SwitchToContext Application.SynchronizationContext' nel tuo blocco asincrono prima di aggiornare 'searchResults.Text'. – ildjarn