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