Подтвердить что ты не робот

Xamarin Android F # обновить интерфейс в асинхронном блоке

Я новичок в Xamarin, и я пытаюсь создать простое приложение для Android с F #. Я пытаюсь загрузить данные из REST API с помощью async, а затем отобразить его. Я понимаю, что взаимодействие с пользовательским интерфейсом должно выполняться на MainThread и что есть что-то вроде строк Activity.RunOnUiThread(). Я пробовал следующее:

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

Что вызывает исключение из-за взаимодействия с элементами пользовательского интерфейса в другом потоке. И это:

    let result = async {
                    let! results = recipeSearch.GetRecipes search.Text
                    return results
                }
                |> Async.RunSynchronously
    searchResults.Text <- result

Поражает цель сделать это Async

Спасибо

4b9b3361

Ответ 1

Попробуйте следующее:

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
            this.RunOnUiThread(fun () -> searchResults.Text <- results)
        }
        |> Async.Start

    button.Click.Add onSearch