我正在逐行阅读文本文件。
StreamReader reader = new StreamReader(OpenFileDialog.OpenFile());
// Now I am passing this stream to backgroundworker
backgroundWorker1.DoWork += ((senderr,ee)=>
{
while ((reader.ReadLine()) != null)
{
string proxy = reader.ReadLine().Split(':').GetValue(0).ToString();
// here I am performing lengthy algo on each proxy (Takes 10 sec,s)
}
});
backgroundWorker1.RunWorkerAsync();
现在的问题是有些线路没有被读取。它会在读取一行后跳过每一行。
我已经使用
读取了总行数File.ReadAllLines(file.FileName).Length
它给出准确的行数。
我怀疑我的代码中的BackgroundWorker机制存在一些问题,但无法弄明白。
答案 0 :(得分:10)
在while ((reader.ReadLine()) != null)
中,您没有将结果分配给任何内容,因此它(将在该调用期间读取的行)将被跳过。
尝试一些变体:
string line = reader.ReadLine();
while (line != null)
{
/* Lengthy algorithm */
line = reader.ReadLine();
}
您可能更喜欢:
string line;
while ((line = r.ReadLine()) != null) {}
答案 1 :(得分:5)
看起来你没有在readline()调用中将行分配给变量。你在阅读冗长算法的下一行吗?
根据您的更新,这绝对是您的问题。
你有这个:
...
while ((reader.ReadLine()) != null)
{
string proxy = reader.ReadLine().Split(':').GetValue(0).ToString();
...
});
你应该这样做:
...
string line;
while ((line = reader.ReadLine()) != null)
{
string proxy = line.Split(':').GetValue(0).ToString();
...
});
答案 2 :(得分:1)
在while循环reader.ReadLine()中读取一行,并在下一次读取字符串proxy = reader.ReadLine()。Split(':')。GetValue(0).ToString(); reader.ReadLine()读取下一行。您尚未将while循环中的读取行分配给任何变量。您必须对while循环中的字符串(Line)执行拆分操作。
答案 3 :(得分:0)
为什么不使用File.ReadLines(pathToFile); ?