次のコードを使用して、データグリッドビューにリストの内容を表示しようとしています。
List<string> data = new List<string>();
dataGridView1.DataSource = data;
backgroundWorker のリストにデータを追加しています。ListをBindingListに変更すると、次のエラーが表示されます
Cross-thread operation not valid: Control 'dataGridView1' accessed from a thread other than the thread it was created on.
ただし、リストを使用すると、データグリッドが表示されたときに 3 番目の列が表示されます。これには、カテゴリの各エントリの文字列の長さのみが含まれます。
BackgroundWorker を使用しているときに、データグリッドに文字列の長さではなく文字列の内容を表示する方法を知っている人はいますか?
private void OnBackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
importExcelFile();
}
private void importExcelFile()
{
// hard coded file name for testing.
TextFieldParser parser = new TextFieldParser(@"E:\\test.csv");
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
//Processing row
string[] fields = parser.ReadFields();
foreach (string field in fields)
{
//TODO: Process field
data.Add(field);
}
}
parser.Close();
}
private void loadFileToolStripMenuItem_Click(object sender, EventArgs e)
{
backgroundWorker1.DoWork += OnBackgroundWorkerDoWork;
backgroundWorker1.RunWorkerAsync();
}
private void OnBackgroundWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dataGridView1.DataSource = data;
}