C# StreamReader还是其他方法?做我想做的事
我正在使用一个程序从文件中读取数据并实时将其绘制成图形。我的数据流来自微控制器输出,我正在构建一个接口来显示数据。我在例行程序中使用流阅读器,但我有一个问题 我想做的是得到一行,绘制它,然后在一个方法中得到下一行。你能告诉我怎么做吗。我是C#新手,我认为流式阅读器是最好的方法。我只是需要一种能够在新观点出现时阅读它们的方法 谢谢C# StreamReader还是其他方法?做我想做的事,c#,C#,我正在使用一个程序从文件中读取数据并实时将其绘制成图形。我的数据流来自微控制器输出,我正在构建一个接口来显示数据。我在例行程序中使用流阅读器,但我有一个问题 我想做的是得到一行,绘制它,然后在一个方法中得到下一行。你能告诉我怎么做吗。我是C#新手,我认为流式阅读器是最好的方法。我只是需要一种能够在新观点出现时阅读它们的方法 谢谢 private void timer1_Tick( object sender, EventArgs e ) { if ( curve == null ) re
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()。没问题。只有在您完全完成读卡器后,即准备停止读取文件时,才可以处置读卡器。这将关闭流并释放它拥有的所有资源。