Xamarin ios不可用的问题

本文关键字:问题 ios Xamarin | 更新日期: 2023-09-27 18:18:50

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

我的代码如下

    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);
        }
    }   

Xamarin ios不可用的问题

每次循环运行时都创建整个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());

在循环的每次迭代上创建一个新的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);
    }
}