从实时订阅源(文件)c#连续更新控件(listBox)

时间:2014-11-19 13:51:01

标签: c# logging readfile logfile

我目前正在做一个小应用程序,它读取一个不断更新的日志文件,解析它并显示相关信息。

我开始在控制台应用程序中做原型,一切都很顺利。现在我完全陷入困境,而不是输出到控制台,尝试将其用于控件(在这种情况下为listBox)。

即使你是一个异步方法,并且作为一个控制台应用程序完美无瑕地工作,UI仍会冻结,因为读取永远不会结束。

我正在尝试查找信息但不确定是否必须运行后台工作人员或我应该采用何种方法。

目前的情况如下:

  • 使用某些控件赢取表单
  • 处理阅读的班级

该课程就像我所说的控制台应用程序一样。它从文件中连续读取并解析信息并输出它,但如果改为输出我尝试将信息添加到列表框,则UI冻结。

快速更新:

async方法是一个封闭的while(几乎是相同的),如果存在,它总是读取新数据。

希望很清楚。任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

我使用了FileSystemWatcher。在最初创建日志时,我先做一次读取,然后实例化观察者。无论何时发生变化,观察者都会从最后一点开始读取。然后我遇到了另一个问题。

我无法访问UI元素,因为它们是在不同的线程中实例化的,但这修复了它:

        if (this._listbox.InvokeRequired)
            this._listbox.Invoke(new MethodInvoker(delegate
            {
                this._listbox.Items.Add(newItem);

            }));
        else
            this._listbox.Items.Add(newItem);

所以我觉得这很适合我。)