如何在Xamarin Android中使用RunOnUIThread()

12

在将结果存入OStateUserId对象后,我想运行这个语句。

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()方法返回一个State类的对象。

它以异步方式运行。在完成操作后,我想将名称人口分配给TextView详情。

我该如何在这种情况下使用RunOnUIThread()

2个回答

23

我不确定你是如何错过它的,因为你已经有了正确的函数名称。无论如何,你可以使用Lambda表达式来实现:

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

或者你可以为此创建一个方法

Activity.RunOnUiThread(Action);

private void Action() 
{ 
    details.Text = OStateUserID.name + "\n" + OStateUserID.population;
}
在后一种情况下,如果变量尚未被存储在私有字段中,则必须将其存储在私有字段中。在第一种情况下,如果变量与RunOnUiThread调用处于相同的作用域中,则会起作用。

6
你不需要这样做。
在你发布的代码中:
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入门的文章,解释了这个行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接