【发布时间】:2017-02-18 00:20:39
【问题描述】:
假设我有一个类通过 TCP 流接收数据,对其进行解析并相应地更改其属性。
public static class SomeClass
{
static bool myBool;
static string myMessage;
public static void ToggleBool()
{
myBool = !myBool;
// Do some other stuff here
}
public static UpdateMessage(string message)
{
System.Diagnostics.Debug.WriteLine(message);
ProcessMessage(message);
myMessage = message;
}
}
现在我想做的是有一个 WPF“调试窗口”,它将直观地显示设置。我想基本上运行一个循环来相应地更新窗口的某些部分。
类似:
public partial class LogWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public Async Task UpdateUI()
{
while(checkForUpdates)
{
myCheckbox.IsChecked = await SomeClass.UpdatedBoolValue();
string newMessage = await SomeClass.NewMessageRCVD();
txtBox.Append(newMessage);
}
}
}
但这有两个明显的问题。一,我不知道如何通过不断地检查while循环来制作一个不会烧毁CPU的函数。我想我可以使用 getter/setter 方法。第二,我必须更新两者才能再次运行该循环。
最好的方法是什么?如何只更新 UI 中需要更新的部分?
【问题讨论】:
-
使用定时器在一定的时间间隔内更新所有值。
-
如果您使用 Caliburn Micro 或 ReactiveUI,它们都有一些用于应用内消息分发的 pub-sub 实现,正好解决了这些问题。