我正在制作一个程序,它将同时打开3个文件,搜索字符串(游戏名称),然后在列表框中显示结果,其中包含3个文件中的信息。
到目前为止,我有这个
string gamesData;
string salesData;
string compData;
string textBox;
StreamReader gamesFile, salesFile, compFile;
gamesFile = File.OpenText("game.dat");
salesFile = File.OpenText("SalesNumbers.dat");
compFile = File.OpenText("company.dat");
textBox = searchTxtBox.Text;
while (!gamesFile.EndOfStream)
{
if (searchTxtBox.Text != "")
{
if(searchTxtBox.Text.Trim() == gamesData)
{
string.Compare(textBox, gamesData);
gamesData = gamesFile.ReadLine();
salesData = salesFile.ReadLine();
compData = compFile.ReadLine();
listBoxGames.Items.Add(gamesData +"====" + salesData + "====" + compData);
}
else
if (microRb.Checked)
{
compData = "ms";
}
else
if (eaRb.Checked)
{
compData = "ea";
}
else
{
compData = "blz";
}
}
}
salesFile.Close();
gamesFile.Close();
compFile.Close();
当我点击搜索按钮时,程序变得无法响应我想知道是否有人指出我做错了什么,谢谢。
答案 0 :(得分:0)
这听起来像你所追求的是多线程/并发/并行编程,并且有多种方法可以实现它......
所以这里有一些东西让你开始。
string[] textFilePaths = new string[]{"games.dat", "SalesNumbers.dat", "company.dat"};
ConcurrentBag<string> bagOfStrings = new ConcurrentBag<string>();
Parallel.ForEach(textFilePaths, path =>
{
string text = File.ReadAllText(path);
bagOfStrings.Add(text);
});
foreach(var text in bagOfStrings)
{
Console.WriteLine (text);
}
答案 1 :(得分:0)
您的代码会创建一个无限循环。您的while
循环不会停止,直到gamesFile
结束。但是,您gamesFile
实际读取的行不会运行,因为它被if (searchTxtBox.Text.Trim() == gamesData)
包围。您的gamesData
变量在前几行中声明,但尚未分配值,因此它为空。 searchTxtBox.Text.Trim()
不等于null,所以你永远不会从gamesFile中读取。所以,你永远不会到gamesFile
的末尾,你的while
循环会永远运行。
读取文件中的行的常用习惯是这样的:
while ((gamesData = gamesFile.ReadLine()) != null)
{
// do something with gamesData here
}
这是有效的,因为ReadLine在到达文件末尾时返回null。所以,你可以这样写:
while ((gamesData = gamesFile.ReadLine()) != null && (salesData = salesFile.ReadLine()) != null)