Xamarin Android F#在异步块中更新UI

kae*_*edo 11 f# asynchronous xamarin.android xamarin

我是Xamarin的新手,我正在尝试使用F#构建一个简单的Android应用程序.我正在尝试使用异步从REST API加载数据,然后显示它.我知道必须在MainThread上完成与UI的交互,并且有一些内容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
Run Code Online (Sandbox Code Playgroud)

这会引发与另一个线程中的UI元素交互的异常.还有这个:

    let result = async {
                    let! results = recipeSearch.GetRecipes search.Text
                    return results
                }
                |> Async.RunSynchronously
    searchResults.Text <- result
Run Code Online (Sandbox Code Playgroud)

击败了做异步的目的

谢谢

jze*_*ino 7

试试这个:

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
Run Code Online (Sandbox Code Playgroud)