C# 将label.Text绑定到从Xamarin中的异步任务更新的字符串
因此,我在Xamarin中有一个监视器页面,需要每秒刷新一次值(从TcpClient获得的值)。 我在CS文件中设置了一个公共字符串,并在Xaml中进行了一些基本绑定,如下所示: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
在我的代码隐藏中,我运行了一个异步任务,刷新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完成了任务!