我正在尝试读取“ csv文件”,然后将其数据保存到employee
记录中,然后将该记录添加到list
中,然后将列表添加到data table
中最后在datagridview
中显示数据表内容。
我似乎无法弄清楚是否运行了无穷循环或问题可能出在哪里。该程序运行1分钟,然后引发错误 ContextSwitchDeadlock 。
private void searchButton_Click(object sender, EventArgs e)
{
string headerLine = reader.ReadLine();
openFileDialog1.ShowDialog();
searchValue.Text = openFileDialog1.FileName;
using (StreamReader reader = new StreamReader(openFileDialog1.FileName))
{
var line = reader.ReadLine();
var value = line.Split(',');
while(!reader.EndOfStream)
{
List<Employee> employeeList = new List<Employee>();
var newEmployee = new Employee();
newEmployee.firstName = value[0];
newEmployee.lastName = value[1];
newEmployee.address = value[2];
newEmployee.age = value[3];
newEmployee.monthlyGrossIncome = value[4];
newEmployee.departmentId = value[5];
newEmployee.developerType = value[6];
newEmployee.taxType = value[7];
}
DataTable dataTable = new DataTable();
dataTable.Columns.Add(headerLine);
employeeDataGridView.DataSource = dataTable;
}
}
答案 0 :(得分:0)
首先,您必须查看自己在做什么以及实际要做什么。
var line = reader.ReadLine();
var value = line.Split(',');
这两行应位于while loop
内。因此,实际上您正在逐行读取 csv 文件的所有内容。现在,它仅迭代一行。
List<Employee> employeeList = new List<Employee>();
您不是在为所有员工列出一个清单,而是在new list
的每次迭代中创建一个while loop
。
您没有在创建的列表中插入employee
对象。
好吧,我不是100%肯定会解决所有问题来解决您系统上的问题,但我已经在计算机上创建了一个类似这样的虚拟项目,并且可以正常工作。
正确的代码:
private void searchButton_Click(object sender, EventArgs e)
{
string headerLine = reader.ReadLine();
openFileDialog1.ShowDialog();
searchValue.Text = openFileDialog1.FileName;
using (StreamReader reader = new StreamReader(openFileDialog1.FileName))
{
List<Employee> employeeList = new List<Employee>();
while(!reader.EndOfStream)
{
var value = reader.ReadLine().Split(',');
var newEmployee = new Employee
{
firstName = value[0],
lastName = value[1],
address = value[2],
age = value[3],
monthlyGrossIncome = value[4],
departmentId = value[5],
developerType = value[6],
taxType = value[7]
};
employeeList.Insert(newEmployee);
}
DataTable dataTable = new DataTable();
dataTable.Columns.Add(headerLine);
employeeDataGridView.DataSource = dataTable;
}
}
现在,来到ContexSwitchDeadlock
,它是Visual Studio中的 Debugging Assistant ,并且是调试器在调试应用程序时提供的工具。在提出这一要求之前,我不确定它所检查的条件。但是请注意,它不是 exception ,它只是视觉工作室,提醒您它正在等待60秒。让我知道这是否解决了问题。