Я написал этот код, чтобы читать тысячи строк из файлов Excel и загружать их в DataGridView.Проблема с BackgroundWorker
Но проблема, с которой я столкнулся, независимо от того, какой файл я загружаю, DataGridView показывает строки только из первого файла, а _list никогда не очищается.
public class MyForm : Form
{
private List<Student> _list = null;
private void LoadFile_Click(object sender, EventArgs e)
{
try
{
if (_list != null)
{
_list.Clear();
}
openFileDialog1.ShowDialog();
_connStr = MakeConnectionString.GetConnectionString(openFileDialog1.FileName);
if (!string.IsNullOrEmpty(_connStr))
{
backgroundWorker1.RunWorkerAsync();
}
}
catch
{
MessageBox.Show("Application is busy with the first task!", "Busy...", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
IDataReader read = StudentDA.GetReader(_connStr);
List<Student> localList = null;
if (_list != null)
{
_list.Clear();
}
_list = StudentMapper.GetStudents(read);
localList = new List<Student>(_list);
dataGridView1.Invoke(new MethodInvoker(delegate
{
dataGridView1.Rows.Clear();
}));
foreach (Student std in localList)
{
dataGridView1.Invoke(new MethodInvoker(delegate
{
dataGridView1.Rows.Add(std.SerialNo, std.RollNo);
}));
}
}
}
Не имеет значения, очистите ли вы список, поскольку: вы не привязываетесь к данным и b: переназначить список в следующей строке; Я все еще смотрю, хотя ... – 2010-12-04 12:17:06
Очистить свой _list в рабочем рабочем завершенном обработчике событий – TalentTuner 2010-12-04 12:20:52