所以我在Xamarin中有一个Monitor Page,在那我需要每秒刷新一次值(从TcpClient获得的值)。
我在CS文件中设置了一个公共String,并在Xaml中进行了一些基本的绑定,如下所示:<Label Text="{Binding myString}"/>
在我后面的代码中,我运行了一个异步任务,该任务刷新了myString
。任务看起来像这样:
protected async Task syncDisplay(){
while(true){
//TcpClient going on, getting some values
myString = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
}
}
然后我只是在运行任务的地方创建一个新线程。就这样。问题是没有值更新到我的UI。当我尝试为Task外部的String赋值时,它可以正常工作。我确定我在这里错过了一些必不可少的东西,但我真的不知道是什么。
预先感谢
答案 0 :(得分:3)
1)您是否在应用中使用MVVM
2)如果需要,请确保在View
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));
}
}