监控工具在c#中拆分gui和后端代码

时间:2012-11-14 14:51:36

标签: c# visual-studio-2010

我有一个监控某些设备的应用程序。我可以将一个字符串发送到设备,然后从设备接收文本。

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

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

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

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

1 个答案:

答案 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
    }
}