假设我有一个类通过TCP流接收数据,解析它并相应地更改它的属性。WPF等待变量更改然后更新UI
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);
}
}
}
但是,有2点明显的问题。其中一个,我不知道如何通过不断检查while循环来创建一个不会烧坏CPU的函数。我想我可以使用getter/setter方法。二,我必须更新两个,以便该循环再次运行。
这是最好的方法是什么?如何更新需要更新的用户界面部分?
编辑:类似的问题:Write an Async method that will await a bool
使用定时器更新某个intervall中的所有值。 – CSharpie
如果您使用Caliburn Micro或ReactiveUI,他们都有一些pub-sub实现用于应用程序内消息分派,可以准确解决这些问题。 –