我正在使用一个程序从文件中读取数据并将其实时绘制到图形中。我的流来自微控制器输出,我正在构建一个界面来显示数据。我在日常工作中使用流阅读器,但我遇到了问题。
我想要做的是获取一行,绘制它,然后获取方法中的下一行。你可以指导我做什么来做这件事。我是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
}
答案 0 :(得分:2)
您将需要缓存您的阅读器并稍微重构您的代码。
基本上,如果您想在每个刻度线上读取一行,您需要将读取器从您的方法中移出并使其成为一个字段。现在当滴答声发生时,它将获取之前使用的相同读者实例。这意味着它与您上次读取的文件位于同一位置。您需要做的就是调用ReadLine()来获取下一行。
您当前设置的方式是,每打开一个打开文件,只读取第一行。只是一个FYI,当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
}
}