2013-12-23 127 views
6

我想在將結果導入OStateUserId對象後運行此語句。如何在Xamarin中使用RunOnUIThread()Android

details.Text = OStateUserID.name + "\n" + OStateUserID.population);

bStateuserID.Click += async delegate 
{ 
    details.Text=" "; 
    Guid x = new Guid("33F8A8D5-0DF2-47A0-9C79-002351A95F88"); 
    state OStateUserID =(state) await obj.GetStateByUserId(x.ToString()); 
    details.Text = OStateUserID.name + "\n" + OStateUserID.population); 
}; 

GetStateByUserId()方法返回class State的對象。

它異步運行。完成操作後,我想將名稱人口分配給TextView詳細信息。

如何在這種情況下使用RunOnUIThread()

回答

4

你不需要。

在此代碼貼:

bStateuserID.Click += async delegate 
{ 
    details.Text=" "; 
    Guid x = new Guid("33F8A8D5-0DF2-47A0-9C79-002351A95F88"); 
    state OStateUserID =(state) await obj.GetStateByUserId(x.ToString()); 
    details.Text = OStateUserID.name + "\n" + OStateUserID.population); 
}; 

details.Text = OStateUserID.name + "\n" + OStateUserID.population); 

在UI線程上已經在運行。

我的博客上有一個async intro,它解釋了這種行爲。

10

我不確定你是怎麼錯過它的,因爲你有正確的功能名稱。無論如何,你可以用lambda表達式做到這一點:

Activity.RunOnUiThread(() => { 
    details.Text = OStateUserID.name + "\n" + OStateUserID.population; 
}); 

或者你可以創建一個方法,它

Activity.RunOnUiThread(Action); 

private void Action() 
{ 
    details.Text = OStateUserID.name + "\n" + OStateUserID.population; 
} 

在後一種情況下,你將不得不存儲變量在私人領域,如果:這不是什麼已經是這種情況了。在第一種情況下,如果變量與RunOnUiThread調用的範圍相同,則它將起作用。