C# StreamReader还是其他方法?做我想做的事

C# StreamReader还是其他方法?做我想做的事,c#,C#,我正在使用一个程序从文件中读取数据并实时将其绘制成图形。我的数据流来自微控制器输出,我正在构建一个接口来显示数据。我在例行程序中使用流阅读器,但我有一个问题 我想做的是得到一行,绘制它,然后在一个方法中得到下一行。你能告诉我怎么做吗。我是C#新手,我认为流式阅读器是最好的方法。我只是需要一种能够在新观点出现时阅读它们的方法 谢谢 private void timer1_Tick( object sender, EventArgs e ) { if ( curve == null ) re

我正在使用一个程序从文件中读取数据并实时将其绘制成图形。我的数据流来自微控制器输出,我正在构建一个接口来显示数据。我在例行程序中使用流阅读器,但我有一个问题

我想做的是得到一行,绘制它,然后在一个方法中得到下一行。你能告诉我怎么做吗。我是C#新手,我认为流式阅读器是最好的方法。我只是需要一种能够在新观点出现时阅读它们的方法

谢谢

private void timer1_Tick( object sender, EventArgs e )
{
    if ( curve == null ) return;

    IPointListEdit list = curve.Points as IPointListEdit;

    if (list == null) return;

    double time = (Environment.TickCount - tickStart) / 1000.0;
    try
    {
        //PROBLEM (NEED TO READ ONE LINE THIS TIME AND THE NEXT LINE IN THE NEXT CALL
        StreamReader sr = new StreamReader("TestFile.txt");
        String line;     
        line = sr.ReadLine();
        double value = double.Parse(line);
        list.Add(time, value);
    }
    catch (Exception err)
    {
        MessageBox.Show(err.Message);
    }

    //graphing code
}

您将需要缓存您的阅读器并稍微重构代码

基本上,如果你想在每个记号处读一行,你需要把你的读卡器移出你的方法,把它变成一个字段。现在,当勾号出现时,它将抓取与以前使用的相同的读卡器实例。这意味着它与上次读取的文件位于同一位置。您只需调用ReadLine()来获取下一行

按照当前的设置方式,每勾一次就打开一个文件,只读取第一行。仅供参考,当ReadLine返回null时,您已到达文件末尾

下面的代码只是一个如何设置它的模型,希望能给你一些关于它如何工作的想法

    StreamReader _reader;

    public void Init()
    {
        _reader = new StreamReader("FileName.txt");
        _timer.Start();
    }

    public void timer_Tick(object sender, EventArgs e)
    {
        if (curve == null)
            return;

        IPointListEdit list = curve.Points as IPointListEdit;

        if (list == null)
            return;

        double time = (Environment.TickCount - tickStart) / 1000.0;
        try
        {
            string line = _reader.ReadLine();
            if (line == null)
            {
                _timer.Stop();
                return;
            }
            double value = double.Parse(line);
            list.Add(time, value);
        }
        catch (Exception err)
        {
            //Do Something
        }

    }

文件是在您阅读要点时写入的,还是假定它是完整的?我认为文件正在写入,当新信息到达时,他需要绘制它。我认为您需要类似Unix/Linux中的tail工具的东西。也许这个问题:有帮助。文件以这种方式打开阅读时无法更新。是的,在我阅读时正在写入文件。我现在还没有考虑到这一点,但我怀疑会有问题。埃米什是正确的。由于不能在using语句中使用读卡器,因此在完成后或重用之前,一定要记住调用Dispose()。没问题。只有在您完全完成读卡器后,即准备停止读取文件时,才可以处置读卡器。这将关闭流并释放它拥有的所有资源。