【问题标题】:How to use RunOnUIThread() in Xamarin Android如何在 Xamarin Android 中使用 RunOnUIThread()
【发布时间】:2013-12-23 10:52:41
【问题描述】:

我想在将结果输入 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()方法返回class State的对象。

它异步运行。完成操作后,我想将 namepopulation 分配给 TextView 详细信息。

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

【问题讨论】:

    标签: xamarin xamarin-studio


    【解决方案1】:

    我不确定你怎么会错过它,因为你有正确的函数名称。无论如何,你可以用 lambda 表达式来做到这一点:

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

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

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

    在后一种情况下,如果不是这种情况,您将不得不将变量存储在私有字段中。在第一种情况下,如果变量与 RunOnUiThread 调用在同一范围内,它将起作用。

    【讨论】:

      【解决方案2】:

      你不需要。

      在您发布的这段代码中:

      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 来解释这种行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 2011-08-25
        • 1970-01-01
        相关资源
        最近更新 更多