【发布时间】:2017-11-01 07:24:25
【问题描述】:
假设客户端应用程序几乎实时地从服务器获取数据。根据检索到的数据持续更新 UI 的更有效方法是什么。考虑多个 xaml 控件,例如显示数字的文本。只要应用程序正在运行,它们就会更新。除非用户决定,否则它们永远不会停止。 (假设按下停止按钮或退出应用程序) 下面我有一个使用 async 和 await 关键字的简单示例。这对我的场景来说是个好方法吗?或者例如 BackgroundWorker 会是更好的方法?
private async void Button_Click_Begin_RT_Update(object sender, RoutedEventArgs e)
{
while(true)
textField1.Text = await DoWork();
}
Task<string> DoWork()
{
return Task.Run(() =>
{
return GetRandomNumberAsString();
});
}
*为了简单起见,我在示例中使用代码隐藏而不是 mvvm
【问题讨论】:
-
自从我使用 WPF 已经有一段时间了,但我认为绑定到 DependencyProperty 是要走的路。这 2 个帖子应该让你朝着正确的方向分流:stackoverflow.com/questions/19981966/…, stackoverflow.com/questions/5824600/…
-
WPF 背后的核心思想是使用数据绑定和视图模型类,以便您永远直接在代码中调用控件。因此,如果我是你,我会创建一个 viewmodel 类,实现
INotifyPropertyChanged接口,将属性绑定到相关控件,然后使用 asyncTasks 更新 viewmodel 类实例。 -
@mcy 为简单起见,我没有基于 MVVM 编写代码。但是我确实在我的项目中使用了 mvvm。
-
@gts13 好的。
TaskvsBackgroundWorker是一个引起很多关注的话题,你可能会发现像blog.stephencleary.com/2013/09/… 或stackoverflow.com/questions/12414601/… 这样的好帖子,我个人几乎所有时间都选择Task。 -
@gts13 你已经有了解决方案。要么它非常适合你,在这种情况下,你没有问题,或者它不是,你需要具体说明它是如何无法满足你的需求的。