2016-06-10 2 views
11

저는 Xamarin을 처음 사용하고 F #으로 간단한 Android 앱을 제작하려고합니다. 비동기로 REST API에서 데이터를로드하고 표시하려고합니다. MainThread에서 UI와의 상호 작용을 수행해야하며, Activity.RunOnUiThread() 행에 뭔가가 있음을 이해합니다. 다른 스레드에서 UI 요소와 상호 작용에 대한 예외를 throwXamarin Android F # 비동기 블록의 UI 업데이트

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 

패배

감사

+2

'할 넣어보세요! Async.SwitchToContext Application.SynchronizationContext'를 실행하여'searchResults.Text'를 업데이트하십시오. – ildjarn

답변

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