Skip to main content
 首页 » 编程设计

c#之xamarin ios uilabel 问题

2024年05月22日31虾米姐

我是编程新手,所以我希望这是一个非常简单的错误。我使用 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); 
 
        } 
    }    

请您参考如下方法:

每次循环运行时,您都会创建整个 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获取更多信息。