Eli*_*nes 1 c# binding multithreading task xamarin
因此,我在 Xamarin 中有一个监视器页面,其中我需要每秒刷新一次值(从 TcpClient 获取的值)。我在 CS 文件中设置了一个公共字符串,并在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我只是创建一个新线程来运行任务。就这样。问题是没有值更新到我的用户界面。当我尝试为任务外部的字符串赋值时,它工作正常。我确信我在这里遗漏了一些重要的东西,但我真的不知道是什么。
提前致谢
1)您的应用程序中是否使用了MVVM
2)如果是,那么您需要确保在您的中设置 DataContextView
3)在你的viewModel(VM)中,你需要从中创建属性myString
private string _myString;
public string MyString
{
get => _myString;
set
{
_myString = value;
NotifyPropertyChanged(() => MyString);
}
}
Run Code Online (Sandbox Code Playgroud)
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));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |