我有一个监控某些设备的应用程序。我可以将一个字符串发送到设备,然后从设备接收文本。
我需要的是制作一个记录设备发送/接收的所有数据的日志文件(仅.txt)。这应该在应用程序中实时显示。
目前我所做的是将日志写入富文本框并从那里写入文件。但是我想从gui中拆分后端代码(与设备连接并创建日志文件)。这使得与设备的通信接口更加便携。
当我在思考这个过程时,我面临一个问题:如何在我的应用程序中更新日志?我可以想到这个选项:制作一个计时器并按时间间隔更新gui。但这并不觉得可怕。在中间有一个缓冲区会很好,如果缓冲区已经改变,则更新gui。
有关如何正确执行此操作的任何提示?
答案 0 :(得分:3)
也许您可以制作日志内容IObservable并让您的UI订阅其更改?
另一个选择是实现INotifyPropertyChanged并使用PropertyChangedEventHandler来通知更改。
这是一段代码片段,向您展示如何使用NotifyPropertyChanged:
using System.ComponentModel;
public class YourClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
protected void AddLogLine(String log)
{
// do your process
NotifyPropertyChanged("Log");
}
}
要注册更改,您只需执行类似(在UI构造函数中):
YourClassInstance.PropertyChanged += new PropertyChangedEventHandler(MyFunctionToHandleLogChanges);
注意:如果更改YourClassInstance
,请确保正确删除并再次添加处理程序然后再次在您的UI类中更新您的UI:
void MyFunctionToHandleLogChanges(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Log")
{
// Update UI
}
}