4

我有一个监视某些设备的应用程序。我可以向设备发送一个字符串,并从设备接收文本。

我需要的是制作一个记录设备发送/接收的所有数据的日志文件(只是 .txt)。这应该在应用程序中实时显示。

目前我所做的是将日志写入富文本框并从那里写入文件。但我想从 gui 中拆分后端代码(与设备交互并创建日志文件)。这使得与设备的通信接口更加便携。

在我思考这个过程时,我面临一个问题:如何更新我的应用程序中的日志?我可以想到这个选项:制作一个计时器并按时间间隔进行 gui 更新。但这并不可怕。在两者之间有一个缓冲区会很好,如果缓冲区已更改,则更新 gui。

有关如何正确执行此操作的任何提示?

4

1 回答 1

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
    }
}
于 2012-11-14T14:55:04.703 回答