Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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# 将label.Text绑定到从Xamarin中的异步任务更新的字符串_C#_Multithreading_Xamarin_Binding_Task - Fatal编程技术网

C# 将label.Text绑定到从Xamarin中的异步任务更新的字符串

C# 将label.Text绑定到从Xamarin中的异步任务更新的字符串,c#,multithreading,xamarin,binding,task,C#,Multithreading,Xamarin,Binding,Task,因此,我在Xamarin中有一个监视器页面,需要每秒刷新一次值(从TcpClient获得的值)。 我在CS文件中设置了一个公共字符串,并在Xaml中进行了一些基本绑定,如下所示: 在我的代码隐藏中,我运行了一个异步任务,刷新myString。任务如下所示: protected async Task syncDisplay(){ while(true){ //TcpClient going on, getting some values

因此,我在Xamarin中有一个监视器页面,需要每秒刷新一次值(从TcpClient获得的值)。 我在CS文件中设置了一个公共字符串,并在Xaml中进行了一些基本绑定,如下所示:

在我的代码隐藏中,我运行了一个异步任务,刷新
myString
。任务如下所示:

protected async Task syncDisplay(){
            while(true){
                //TcpClient going on, getting some values
                myString = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
            }
        }
然后我只是创建一个新线程,在那里我运行任务。这就是全部。问题是我的UI没有更新任何值。当我尝试为任务外部的字符串赋值时,效果很好。我肯定我错过了一些重要的东西,但我真的不知道是什么

提前感谢

1)您在通知中是否使用了MVVM

2) 如果是,请确保在
视图中设置了DataContext

3) 在viewModel(VM)中,您需要从
myString

    private string _myString;
    public string MyString
    {
        get => _myString;
        set
        {
            _myString = value;
            NotifyPropertyChanged(() => MyString);
        }
    }
4) 所有进行UI更新的代码都必须在UI线程中,如下所示

protected async Task syncDisplay(){
        while(true){
            //TcpClient going on, getting some values
        Device.BeginInvokeOnMainThread(()=>MyString = System.Text.Encoding.ASCII.GetString(data, 0, bytes));

        }
    }
1) 您是否在通知中使用MVVM

2) 如果是,请确保在
视图中设置了DataContext

3) 在viewModel(VM)中,您需要从
myString

    private string _myString;
    public string MyString
    {
        get => _myString;
        set
        {
            _myString = value;
            NotifyPropertyChanged(() => MyString);
        }
    }
4) 所有进行UI更新的代码都必须在UI线程中,如下所示

protected async Task syncDisplay(){
        while(true){
            //TcpClient going on, getting some values
        Device.BeginInvokeOnMainThread(()=>MyString = System.Text.Encoding.ASCII.GetString(data, 0, bytes));

        }
    }

在ui/main线程上更新
myString
是您的myString setter调用PropertyChanged()?在ui/main线程上更新
myString
是您的myString setter调用PropertyChanged()?谢谢,将更新添加到ui线程并通过添加PropertyChanged来调整我的setter完成了任务!谢谢你,将更新添加到UI线程并通过添加PropertyChanged来调整我的Setter完成了任务!