xamarin ios uilabel问题

时间:2015-10-21 14:36:12

标签: c# ios xamarin uilabel

我对编程很新,所以我希望这是一个非常简单的错误。我使用visual studio在xamarin ios应用程序中创建了UILabel,我希望每隔30秒用新数据更新它。我已经让它更新了,但是我的标签中只有新的数字,而不是我的前一个数字,在经过几次运行之后,它是不可读的。如何制作,以便我只在int中获得UILabe的新值?

我的代码如下

    int mytest = 0;
    private async Task RefreshAsync()
    {
        while (0 == 0)
        {
            mytest++;

            var t1label = new UILabel(new RectangleF(10, 10, 200, 100));
            t1label.Text = mytest.ToString();
            View.Add(t1label);
            t1label.Font = UIFont.SystemFontOfSize(25);
          await Task.Delay(30000);

        }
    }   

2 个答案:

答案 0 :(得分:2)

每次循环运行时都会创建整个UILabel。这就是它在屏幕上多次出现的原因。

在循环外创建标签,并仅刷新循环内的Text属性。例如:

int mytest = 0;
private async Task RefreshAsync()
{
    var t1label = new UILabel(new RectangleF(10, 10, 200, 100));        
    View.Add(t1label);
    t1label.Font = UIFont.SystemFontOfSize(25);

    while (true)
    {
        t1label.Text = mytest.ToString();
        mytest++;
        await Task.Delay(30000);
    }
}   

更多信息: 您正在通过更新其他线程中的标签Text来更改UI。这可能会导致问题。您应该始终在主线程上执行UI更新代码。因此,更改行

会更好
t1label.Text = mytest.ToString();

InvokeOnMainThread(() => t1label.Text = mytest.ToString());

阅读this了解详情。

答案 1 :(得分:1)

您正在循环的每次迭代中创建一个新Label,然后将其分层到现有标签之上。相反,您应该只创建一次标签,并且只更新它的值:

int mytest = 0;

// create the label outside of the loop
var t1label = new UILabel(new RectangleF(10, 10, 200, 100));
t1label.Text = mytest.ToString();
View.Add(t1label);
t1label.Font = UIFont.SystemFontOfSize(25);

private async Task RefreshAsync()
{
    while (0 == 0)
    {
      mytest++;

      t1label.Text = mytest.ToString();

      await Task.Delay(30000);
    }
}