我是编程新手,所以我希望这是一个非常简单的错误。我使用 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获取更多信息。
