Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# xamarin ios标签问题_C#_Ios_Xamarin_Uilabel - Fatal编程技术网

C# xamarin ios标签问题

C# xamarin ios标签问题,c#,ios,xamarin,uilabel,C#,Ios,Xamarin,Uilabel,我对编程相当陌生,所以我希望这是一个非常简单的错误。我使用visual studio在xamarin ios应用程序中创建了一个UILabel,我希望每30秒用新数据更新一次。我已经把它更新了,但不是只更新标签上的新号码,我把新号码放在我以前的号码之上,但运行了几次之后,它就不可读了。如何使其仅在UILabe中获取我的int的新值 我的代码如下 int mytest = 0; private async Task RefreshAsync() { whil

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

        }
    }   

您将在循环的每个迭代中创建一个新标签,然后将其分层到现有标签的顶部。相反,您只需创建一次标签,并仅更新其值:

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

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

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

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);
    }
}   
进一步资料: 您可以通过在不同的线程中更新标签的
文本来更改UI。这可能会引起问题。您应该始终在主线程上执行UI更新代码。所以最好换一条线

t1label.Text = mytest.ToString();


阅读以了解更多信息。

我正试图按照您上面的建议去做,但当我这样做时,我会遇到很多错误。主要是在创建标签时使用var。它有一个错误“上下文关键字'var'可能只出现在局部变量声明或脚本代码中”我是否遗漏了一些简单的内容?有可能创建一个公共标签吗?只需显式地将其声明为标签,而不是使用varI。我希望这是我的最后一个问题:如何将其添加到视图中?view.add(t1label)在这种情况下不起作用,因为它不在类中。我非常感谢你的帮助!我得到的错误是“名称'View.add'在当前上下文中不存在”。然后将对视图的引用传递到执行更新的方法中。我遇到了相同的问题。必须在while循环之前初始化标签。
InvokeOnMainThread(() => t1label.Text = mytest.ToString());